4.4 MySQL存储

目录

1、使用前提

2、使用连接数据库最初步骤

2.1 最初步骤

2.2 connect()方法中参数简单传递

3、创建数据库(创建架构)和创建表

3.1 创建数据库(创建架构)

3.2 创建表

3.2.1 基本创建

3.2.2 创建自增主键

4、Pycharm 可视化连接 MySQL 图形界面

5、插入、更新、查询、删除数据

5.1 插入数据

5.2 、更新数据

5.3、查询数据

5.4、删除数据

6. MySQL存储字典

1、使用前提

        安装MySQL数据库,安装pymysql第三方库。

2、使用连接数据库最初步骤

2.1 最初步骤

(1) 声明一个连接对象。使用connect()方法声明一个连接对象conn,参数为数据库的一些信息。依次为主机名、用户名、密码、端口号;

(2) 获得游标。使用cursor()方法获得游标;

(3) 执行 sql 语句。使用execute()方法;

(4)关闭游标;

(5) 关闭连接。

以下代码对数据库进行了连接,执行语句,得到版本。

import pymysql# (1) 声明一个连接对象
conn = pymysql.connect(host='localhost', user='root', passwd='1141477238', port=3306)   # (2) 建立游标
cursor = conn.cursor()# (3) 执行语句        
sql = "SELECT VERSION()"
cursor.execute(sql)data = cursor.fetchone()    # fetchone()得到第一条数据
print('DataBase version:', data)cursor.close()            # (4) 关闭游标
conn.close()                # (5) 关闭连接# 输出:DataBase version: ('8.3.0',)

2.2 connect()方法中参数简单传递

        在上面可以看到connect()方法中参数很多,若要多次连接,每次一个个写或者复制比较繁琐,所以下面采取更方便的传递方法。

        建立一个新python文件mysql_info.py,将其中参数设置为字典,如下:

mysql_local = {'host': 'localhost','user': 'root','passwd': '1141477238','port': 3306,
}

        在主要文件中使用如下:

from mysql_info import mysql_local#.......
conn = pymysql.connect(**mysql_local)
#.......

        **mysql_local会将mysql_local字典中的键值对展开,作为关键字参数传递给pymysql.connect函数。

3、创建数据库(创建架构)和创建表

3.1 创建数据库(创建架构)

# 使用语句create database 数据库名
# 默认编码方式urf-8
sql = "create database spider default character set utf8mb4"

3.2 创建表

3.2.1 基本创建

        使用CREATE TABLE 表名(表头),此处为id,name,age。

import pymysqlconn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
sql = ('CREATE TABLE IF NOT EXISTS student(id VARCHAR(255) NOT NULL, ''name VARCHAR(255) NOT NULL, ''age INT NOT NULL, ''PRIMARY KEY (id))')
cursor.execute(sql)
cursor.close()
conn.close()

        IF NOT EXISTS表明如果没有此表则创建该表,有则不会再创建表,即使改动后面的name、age等再执行一次,也不会有变化。若没有IF NOT EXISTS 在初始创建后再执行了一次该程序后再执行会报错,即存在表再创建会报错。

        NOT NULL表明不允许该键为空,否则报错。

3.2.2 创建自增主键

        该内容不与下方联系。

    sql = ('CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, ''username VARCHAR(50),''email VARCHAR(100))')

         该主键id会随着数据的增多而自增,再 insert 语句中不需要自己添加。(主键是用来唯一标识每一条记录的,如果没有主键或者主键值为空,就无法唯一标识记录,会容易导致插入失败。)

def insert_movie():conn = pymysql.connect(**mysql_local)cursor = conn.cursor()username = 'hhhhh'email = '1111111'sql = f'INSERT INTO users (username, email) VALUES (%s, %s)'cursor.execute(sql, (username, email))conn.commit()conn.close()

        结果如下(第一条为最先插入的,现插入第二条):

4、Pycharm 可视化连接 MySQL 图形界面

        在执行代码后观察。具体见链接http://t.csdnimg.cn/ZYZoQ

        根据上述代码,我们可以看到我们的数据库spider,点击表student,发现如下图所示:

        即建表成功,可以开始之后的操作。

5、插入、更新、查询、删除数据

5.1 插入数据

        使用insert into 表名(表头元素) values (%s, %s, %s),之后execute()中传入参数,再比最初步骤多了一个连接提交conn.commit()即可。

        为了避免插入失败导致报错崩溃程序,加一层异常处理。若插入失败,则执行conn.rollback(),会发生数据回滚,相当于没插入这条数据。之后执行后面的程序。

import mysql# 插入数据
conn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
id = '10001'
name = 'John'
age = 20
sql = 'insert into student(id, name, age) values (%s, %s, %s)'
try:cursor.execute(sql, (id, name, age))conn.commit()
except:conn.rollback()print("插入失败")
cursor.close()
conn.close()

5.2 、更新数据

        使用update 表明 set 要改变量名 = %s where id = %s(id为定位变量)

# 改id为10001的age
sql = 'update student set age = %s where id = %s'
cursor.execute(sql, (25, '10001'))

5.3、查询数据

        使用select * from 表名 where 条件"。执行后结果返回再游标对象里,使用fetchall()方法返回所有符合条件的结果。

初表:

# 查询数据
conn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
sql = "select * from student where age >= 25"
cursor.execute(sql)
result = cursor.fetchall()
print(result)

执行代码结果:

5.4、删除数据

        改变 sql 语句即可,使用delete from 表名 where 条件即可

import mysqlconn = pymysql.connect(host='localhost', user='root',passwd='1141477238', port=3306, db='spider')
cursor = conn.cursor()
sql = "delete from student where age >= 25 "
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()

6. MySQL存储字典

        在上述发现表格数据id,name,age等要一个个写入比较麻烦,所以接下来介绍一个以字典的方式把数据存入MySQL。

        主要是将字典的键值拆开,分别合并为字符串,去对应 sql 语句中的内容,之后将excute()方法中的第二个参数设置为元组即可。

import pymysql
from mysql_info import mysql_local    # 插入数据此文件中要加入'db': '数据库名'data = {'id': '10005','name': 'HaLun','age': 26
}
table_name = 'student'
conn = pymysql.connect(**mysql_local)
cursor = conn.cursor()keys = ','.join(data.keys())    
s_value = ','.join(['%s'] * len(data))sql = f"INSERT INTO {table_name}({keys}) VALUES ({s_value})"
print(sql)    # 输出:INSERT INTO student(id,name,age) VALUES (%s,%s,%s)
print(tuple(data.values()))    # 输出:('10005', 'HaLun', 26)cursor.execute(sql, tuple(data.values()))
conn.commit()
cursor.close()
conn.close()

本人新手,若有错误,欢迎指正;若有疑问,欢迎讨论。若文章对你有用,点个小赞鼓励一下,谢谢,一起加油吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/492320.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

云HIS支持连锁集团化管理,1+N模式,支撑运营,管理,决策多位一体

目录 云HIS系统特色 使用简易化 连锁集团化 可扩展化 系统描述 云HIS系统优势 (1)客户/用户角度 (2)开发/运维角度 (3)成功应用案例 HIS分系统(HIS子系统) 1、医疗业务子…

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现CPO-HKELM冠豪猪算法优化混合核极限学习机…

高频面试题整理(二)

文章目录 索引相关问题优化你的索引 密集索引和稀疏索引如何定位并优化慢查询sqlMyISAM与InnoDB 关于锁方面的区别是什么?MyISAMInnoDB事务隔离级别 多线程并发的相关问题Thread中的start和run方法的区别Thread和Runnable是什么关系?如何处理线程的返回值…

Python实现力扣经典面试题——删除有序数组中的重复项 II

题目:删除有序数组中的重复项 II 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外…

2627. 函数防抖

说在前面 🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。 题目描述 请你编写一个函数,接收参数为另一个函数和一个以毫秒为单位的时间 t &#xff0…

【C++精简版回顾】10.this

1.定义 在 C 中,每一个对象都能通过 this 指针来访问自己的地址(指向本身)。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。 2.this作用域是在类内部,只能在成员…

《Docker 简易速速上手小册》第7章 高级容器管理(2024 最新版)

文章目录 7.1 容器监控与日志7.1.1 重点基础知识7.1.2 重点案例:监控 Flask 应用7.1.3 拓展案例 1:使用 ELK Stack 收集和分析日志7.1.4 拓展案例 2:使用集成监控工具 7.2 性能调优与资源限制7.2.1 重点基础知识7.2.2 重点案例:Fl…

项目实战:Qt监测操作系统cpu温度v1.1.0(支持windows、linux、国产麒麟系统)

若该文为原创文章,转载请注明出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/136277231 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

随机分布模型

目录 前言 一、离散型随机变量 1.1 0-1分布 1.2 二项分布 1.3 帕斯卡分布 1.4 几何分布 1.5 超几何分布 1.6 泊松分布 二、连续型随机变量 2.1 均匀分布 2.2 指数分布 2.3 高斯分布/正态分布 2.4 分布(抽样分布) 2.5 t分布(抽样…

NotePad2轻便够用的文本编辑器

下载方式: 360软件管家里就可以安装,非常的方便。 打开后,界面如下: 可以拖拽打开文本,和notepad的功能差不多,可以平行替代。

【力扣白嫖日记】178.分数排名

前言 练习sql语句,所有题目来自于力扣(https://leetcode.cn/problemset/database/)的免费数据库练习题。 今日题目: 178.分数排名 表:Scores 列名类型idintscoredecimal 在 SQL 中,id 是该表的主键。 …

linux查看服务器内核CUP版本相关命令

服务器参考 计算架构:x86-64产品系列:华为云耀云服务器操作系列:CentOS 7 执行uname -a查看服务器内核版本 Linux hecs-82210 3.10.0-1160.92.1.el7.x86_64 #1 SMP Tue Jun 20 11:48:01 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux执行hostn…