关闭页面特效

使用Python操作MySQL数据库

1|0使用Python操作MySQL数据库


1|1一、数据库的安装和连接


1.1 PyMySQL的安装

pip install pymysql

1.2Python连接数据库

import pymysql # 打开数据库连接 db = pymysql.connect("数据库IP","用户","密码","数据库") # 通过 db 创建操作sql的 游标对象 # 注:游标不设置参数,查询的结果就是数据元组,数据没有标识性 # 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段 cursor = db.cursor(pymysql.cursors.DictCursor) # 使用 execute()方法执行SQL语句 # cursor.execute(sql, (参数1,参数2)) 执行单条SQL语句 # cursor.executemany(sql, [(参数1,参数2),(参数1,参数2)]) 执行多条SQL语句 data = cursor.execute("sql语句") print(data) # 提交到数据库执行 # 重点:在创建conn对象时,不设置autocommit,默认开启事务,增删改操作不会直接映射到数据库中,需要执行 db.commit() 动作 db.commit() # 关闭数据库连接 db.close()

1.3连接数据库的基本操作

# 选取操作的模块 pymysql # pymysql连接数据库的必要参数:主机、端口、用户名、密码、数据库 # 注:pymysql不能提供创建数据库的服务,数据库要提前创建 import pymysql # 1)建立数据库连接对象 conn # 2)通过 conn 创建操作sql的 游标对象 # 3)编写sql交给 cursor 执行 # 4)如果是查询,通过 cursor对象 获取结果 # 5)操作完毕,端口操作与连接 # 1)建立数据库连接对象 conn conn = pymysql.connect(user='root', passwd='root', database='oldboy') # conn = pymysql.connect(user='root', passwd='root', database='oldboy', autocommit=True) # 2)通过 conn 创建操作sql的 游标对象 # 注:游标不设置参数,查询的结果就是数据元组,数据没有标识性 # 设置pymysql.cursors.DictCursor,查询的结果是字典,key是表的字段 cursor = conn.cursor(pymysql.cursors.DictCursor) # 3)编写sql交给 cursor 执行

1|2二、创建表操作


import pymysql # 打开数据库连接 #db = pymysql.connect("localhost", "testuser", "test123", "TESTDB") # 使用 cursor() 方法创建一个游标对象 cursor cursor = db.cursor() # 使用 execute() 方法执行 SQL,如果表存在则删除 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 使用预处理语句创建表 sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # 关闭数据库连接 db.close()

1|3三、操作数据


3.1插入操作

import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "testuser", "test123", "TESTDB") # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 插入语句 sql = """INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)""" try: cursor.execute(sql) # 执行sql语句 db.commit() # 提交到数据库执行 except: db.rollback() # 如果发生错误则回滚 # 关闭数据库连接 db.close()

3.2 查询操作

Python查询Mysql使用 fetchone() 方法偏移一条数据后获取单条数据,使用fetchall()方法获取多条数据。

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
  • fetchall(): 接收全部的返回结果行.
  • rowcount(): 这是一个只读属性,并返回执行execute()方法后影响的行数。
  • fetchmary(n):偏移n条数据后取出结果。
import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "testuser", "test123", "TESTDB") # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 查询语句 sql = "SELECT * FROM EMPLOYEE \ WHERE INCOME > %s" % (1000) try: cursor.execute(sql) # 执行SQL语句 results = cursor.fetchall() # 获取所有记录列表 for row in results: fname = row[0] lname = row[1] age = row[2] sex = row[3] income = row[4] # 打印结果 print ("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \ (fname, lname, age, sex, income )) except: print("Error: unable to fetch data") # 关闭数据库连接 db.close()

3.3 更新操作

import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "testuser", "test123", "TESTDB") # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 更新语句 sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M') try: cursor.execute(sql) # 执行SQL语句 db.commit() # 提交到数据库执行 except: db.rollback() # 发生错误时回滚 # 关闭数据库连接 db.close()

3.4 删除操作

import pymysql # 打开数据库连接 db = pymysql.connect("localhost", "testuser", "test123", "TESTDB") # 使用cursor()方法获取操作游标 cursor = db.cursor() # SQL 删除语句 sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20) try: cursor.execute(sql) # 执行SQL语句 db.commit() # 提交修改 except: db.rollback() # 发生错误时回滚# 关闭连接 db.close()

1|4四、数据备份


4.1 数据库的逻辑备份

#语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql #示例: #单库备份 mysqldump -uroot -p123 db1 > db1.sql mysqldump -uroot -p123 db1 table1 table2 > db1-table1-table2.sql #多库备份 mysqldump -uroot -p123 --databases db1 db2 mysql db3 > db1_db2_mysql_db3.sql #备份所有库 mysqldump -uroot -p123 --all-databases > all.sql

4.2 数据恢复

#方法一: [root@nick backup]# mysql -uroot -p123 < /backup/all.sql #方法二: mysql> use db1; mysql> SET SQL_LOG_BIN=0; #关闭二进制日志,只对当前session生效 mysql> source /root/db1.sql

1|5五、事务和锁


事务:通常一些业务需要多条sql语句参与,参与的sql会形成一个执行整体,该整体外面就称之为事务。简而言之:事务就是保护多条之执行的sql语句。

5.1 事务的四大特性

  1. 原子性:事务是一组不可分割的单位,要么同时成功,要么同时不成功。
  2. 一致性:事务前后的数据完整性应该保持一致(数据库的完整性:如果数据库在某一时间点下,所有的数据都符合所有的约束,则称数据库为完整性的状态)
  3. 隔离性:事务的隔离性是指多个用户并发访问数据时,一个用户的事务不能被其他用户的事务干扰,多个并发事务之间数据要相互隔离
  4. 持久性:持久性是指一个事务一旦被提交,它对数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。

总结:只有具备了这四大特性的sql语句才能被称之为事务。

begin; # 开启事务 select * from emp where id = 1 for update; # 查询id值,for update添加行锁; update emp set salary=10000 where id = 1; # 完成更新 commit; # 提交事务

__EOF__

作  者半哑
出  处https://www.cnblogs.com/Lin2396
关于博主:热爱生活,爱读书/旅游,喜欢技术,乐于专研。评论和私信会在第一时间回复。或者直接私信我。
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   半哑Lin  阅读(672)  评论(0编辑  收藏  举报
编辑推荐:
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
阅读排行:
· 手把手教你更优雅的享受 DeepSeek
· 腾讯元宝接入 DeepSeek R1 模型,支持深度思考 + 联网搜索,好用不卡机!
· AI工具推荐:领先的开源 AI 代码助手——Continue
· 探秘Transformer系列之(2)---总体架构
· V-Control:一个基于 .NET MAUI 的开箱即用的UI组件库
点击右上角即可分享
微信分享提示