【mysql-03】python连接数据库及使用
一、Python连接Mysql数据库的几种方式(了解)
- MysqlDB
- 是python2.x连接数据库的工具,曾使用非常广泛
- 现在由于进入了python3.x时代,基本已经废弃了
- MysqlClient
- 是mysqldb的衍生版本,兼容mysqldb
- 是django的orm映射工具
- PyMysql
- 是一个纯Python开发的工具,也兼容mysqldb
- 使用简单,功能强大
- SQLAlChemy
- 是一个既支持纯sql语言,也支持ORM映射的工具
python3 安装pymysql:
–>pip install pymysql
二、基础知识
2.1 使用流程
2.2 游标
类似于指针,指针是指向数据的地址
在计算机中,我们获取数据不是直接获取的,而是通过地址获取,而指针就是指向地址的探头,通过指针,我们才能访问到具体的数据。
三、创建,查询,增,改,删除等操作
3.1 创建表
代码
#创建表 # 1 导包 import pymysql # 2 建立连接 db_conn = pymysql.connect(host='10.XXXXX', #改成地址 user='root', password='669988', port=33066, database='test', charset='utf8') # 3 获取游标 cursor = db_conn.cursor() # 4 如果数据表已经存在使用execute()方法删除表。 cursor.execute("DROP TABLE IF EXISTS EMPLOYEE") # 创建数据表SQL语句 sql = """CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )""" cursor.execute(sql) # 5 关闭游标 cursor.close() # 6 关闭连接 db_conn.close() |
使用navicate查看:
3.2 新增单个
代码:和上面相同,删除掉之
# 4 执行插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
LAST_NAME, AGE, SEX, INCOME)
VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
try:
cursor.execute(sql)
# 提交到数据库执行
db_conn.commit()
except:
# 发生错误时回滚
db_conn.rollback()
# 5 查看执行结果
# 注意:写入语句不能通过fetchone和fetchall来查看
cursor.execute(f"SELECT * FROM EMPLOYEE WHERE INCOME > {1000}")
print("全部结果:", cursor.fetchall())
结果:
3.3 新增多个
代码:
#另一种插入数据的方式,通过字符串传入值
sql = "insert into EMPLOYEE values(%s,%s,%s,%s,%s)"
insert = cur.executemany(sql,[('wang','b',30,'M',10000),('an','hy',27,'W',6000)])
print ('批量插入返回受影响的行数:',insert)
cursor.close()
conn.commit()
也可以直接服务器查看结果:
3.4 修改
主要代码:
update_sql = f"UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '{'M'}'"
cursor.execute(update_sql)
# 查看结果
cursor.execute(f"SELECT * FROM EMPLOYEE")
print("全部结果:", cursor.fetchall())
结果:
3.5 删除
主要代码:
# 4 执行删除语句
delete_sql = f"DELETE FROM EMPLOYEE WHERE AGE > {30}"
cursor.execute(delete_sql)
# 查看删除结果
cursor.execute(f"SELECT * FROM EMPLOYEE")
print("删除之后的结果: {}".format(cursor.fetchall()))
db_conn.commit()
四、事务回滚
4.1 事务的概念:
介绍: 事务是对一组工作序列的操作,这组操作要么全部成功,要么全部失败。
例子: 银行转行案例
特点(重点) :事务有4个特点(ACID)
原子性: 是指事务就像原子一样不可分割
一致性: 事务提交前后,数据的状态不会发生改变
隔离性(最难): 是指事务与事务之间不能相互干扰
持久性: 提交事务后,对数据状态的改变是永久性。
注意:使用事务的数据库,理论上只能够通过事务来改变数据。
详细的可见上一章节 。
4.2 数据库事务提交的机制
自动提交:
建立连接时通过,autocommit的值进行设置
建立连接之后,通过conn.autocommit(True)进行设置
手动提交:
指在未开启自动提交事务之前,可以使用手动提交事务
conn.commit() 提交事务
conn.rollback() 回滚事务
4.3 事务操作举例
代码:
import pymysql db_conn = pymysql.connect(host='10.19.XXX', user='root', password='669988', port=33066, database='test', charset='utf8') cursor = db_conn.cursor() #修改前查询所有数据 cursor.execute("select * from EMPLOYEE") print("修改前的数据为:") for res in cursor.fetchall(): print(res)
print("*"*40) cursor.execute("update EMPLOYEE set INCOME=3000 where FIRST_NAME='Mac'") #修改后查询所有数据 cursor.execute("select * from EMPLOYEE") print("修改后的数据为:") for res in cursor.fetchall(): print(res)
print("*"*40) #回滚事务 db_conn.rollback() #回滚后查询所有数据 cursor.execute("select * from EMPLOYEE") print("回滚后的数据为:") for res in cursor.fetchall(): print(res)
cursor.close() db_conn.commit() db_conn.close() print('sql执行成功') |
查看数据库:
五、完整实例
结果:
例子代码:
'''插入100条数据到数据库(一次插入多条)''' import pymysql import string,random #打开数据库连接 conn = pymysql.connect(host='10.19.156.252', user='root', password='669988', port=33066, charset='utf8') conn.select_db('test') #获取游标 cur=conn.cursor()
#创建user表 cur.execute('drop table if exists user') sql = """CREATE TABLE IF NOT EXISTS user ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, age int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0""" cur.execute(sql) #修改前查询所有数据 cur.execute("select * from user;") print('修改前的数据为:') for res in cur.fetchall(): print (res)
print ('*'*40) #循环插入数据 words=list(string.ascii_letters) sql="insert into user values(%s,%s,%s)" random.shuffle(words)#打乱顺序 cur.executemany(sql,[(i+1,"".join(words[:5]),random.randint(0,80)) for i in range(100) ])
#插入100条后查询所有数据 cur.execute("select * from user;") print('修改后的数据为:') for res in cur.fetchall(): print (res) print ('*'*40)
cur.close() conn.commit() conn.close() print('sql执行成功') |
数据库操作之python连接mysql的四种方式、pymysql操作数据库、事务 : https://blog.csdn.net/limy_liu/article/details/103831912
https://blog.csdn.net/kongsuhongbaby/article/details/84948205