赞
踩
Python 操作 Mysql 常用方式:
在实际项目中,如果仅仅是简单的爬虫或者自动化,建议使用 PyMysql;否则建议使用 SQLAlchemy,它更强大方便。
下面使用 PyMySQL 连接 Mysql数据库,并实现简单的增删改查。
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。
检查是否安装PyMySQL:
pip list
如果未安装,使用 pip命令安装 PyMySQL。
pip install PyMySQL #安装最新版本
还需要安装一下 cryptography包:
pip install cryptography
因为 python连接数据库是的加密方式需要 cryptography包。如果你不安装cryptography,python连接数据库会报错“:RuntimeError: ‘cryptography’ package is required for sha256_password or caching_sha2_password auth methods。该错误提示的意思是:sha256_password和caching_sha2_password两种加密方式需要cryptography。
连接 Mysql数据库之前,我们创建一个 py_db数据库。
数据库连接:使用 pymysql 中的 connect() 方法,传入数据库的 HOST 地址、端口号、用户名、密码、待操作数据库的名称,即可以获取数据库的连接对象。
import pymysql # 获取数据库连接 dbConn = pymysql.connect(host='localhost', port=3306, user='root', password='***', database='py_db', # charset='utf8', cursorclass=pymysql.cursors.DictCursor) # 使用 cursor() 方法创建一个游标对象 cursor cursor = dbConn.cursor() print(cursor) # <pymysql.cursors.DictCursor object at 0x000001D3B1768510> # 释放资源 cursor.close() dbConn.close()
我们可以通过游标对象来操作增删改查等。
注意:
操作完毕之后,我们需要将游标对象和数据库连接对象资源释放掉。
创建数据库表:可以使用 execute()方法来为数据库创建表。
注意:
execute()方法可以执行标准的SQL语句,比如:创建表,插入,修改,删除等操作。
import pymysql # 获取数据库连接 dbConn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='py_db', # charset='utf8', cursorclass=pymysql.cursors.DictCursor) # 使用 cursor() 方法创建一个游标对象 cursor cursor = dbConn.cursor() create_table_sql = "CREATE TABLE `t_user` ( \ `id` bigint NOT NULL AUTO_INCREMENT,\ `user_name` varchar(145) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,\ `pazzword` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,\ `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,\ `age` int DEFAULT NULL,\ `birthday` date DEFAULT NULL,\ PRIMARY KEY (`id`)\ ) ENGINE=InnoDB" # 使用 execute() 方法执行 SQL res = cursor.execute(create_table_sql) print(res) # 0 # 释放资源 cursor.close() dbConn.close()
Python执行SQL语句常用方法:
# 使用 cursor() 方法创建一个游标对象 cursor cursor = dbConn.cursor() insert_sql = "INSERT INTO `t_user`(`user_name`, `pazzword`, `sex`, `age`, `birthday`) VALUES ('赵云', '123456', '男', 20, now())" try: # 执行 SQL语句 res = cursor.execute(insert_sql) print(res) # 1 # 提交事务 dbConn.commit() except: # 回滚 dbConn.rollback() raise finally: # 释放资源 cursor.close() dbConn.close()
4.2 使用变量传递参数
推荐使用变量向SQL语句中传递参数,防止SQL注入。
import time insert_sql = "INSERT INTO `t_user`(`user_name`, `pazzword`, `sex`, `age`, `birthday`) VALUES ('%s', '%s', '%s', %s, '%s')" % \ ('赵云2', '123456', '男', 18, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) try: # 执行 SQL语句 res = cursor.execute(insert_sql) print(res) # 1 # 提交事务 dbConn.commit() except: # 回滚 dbConn.rollback() raise finally: # 释放资源 cursor.close() dbConn.close()
import time insert_sql = "INSERT INTO `t_user`(`user_name`, `pazzword`, `sex`, `age`, `birthday`) VALUES (%s, %s, %s, %s, %s)" insert_datas = [ ("赵子龙1", "123456", "男", 18, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), ("赵子龙2", "123456", "男", 19, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())), ("赵子龙3", "123456", "男", 20, time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))] try: # 执行 SQL语句 # res = cursor.execute(insert_sql) res = cursor.executemany(insert_sql, insert_datas) print(res) # 3 # 提交事务 dbConn.commit() except: # 回滚 dbConn.rollback() raise finally: # 释放资源 cursor.close() dbConn.close()
注意:
PyMysql 会将 SQL 语句中的所有字段的传参值当做字符串类型进行处理。
和插入操作类似,只需要变更 SQL 语句即可,推荐使用变量传递参数。
update_sql = 'UPDATE `t_user` SET `user_name` = %s, `pazzword` = %s, `sex` = %s, `age` = %s WHERE `id` = %s'
update_datas = ("安琪拉", "123456", "女", 18, 2)
try:
# 执行 SQL语句
res = cursor.execute(update_sql, update_datas)
print(res) # 1
# 提交事务
dbConn.commit()
...
和插入操作类似,只需要变更 SQL 语句即可,推荐使用变量传递参数。
delete_sql = 'DELETE FROM `t_user` WHERE `id` = %s'
delete_datas = [(1),(2)]
try:
# 执行 SQL语句
res = cursor.executemany(delete_sql, delete_datas)
print(res) # 2
# 提交事务
dbConn.commit()
...
Python查询数据库常用方法:
select_sql = "SELECT * FROM `t_user` WHERE id = %s "
select_datas = (5)
try:
# 执行 SQL语句
cursor.execute(select_sql, select_datas)
res = cursor.fetchone()
print(res) # {'id': 5, 'user_name': '赵子龙1', 'pazzword': '123456', 'sex': '男', 'age': 18, 'birthday': datetime.date(2023, 2, 13)}
except:
raise
finally:
# 释放资源
cursor.close()
dbConn.close()
select_sql = "SELECT * FROM `t_user` WHERE id >= %s AND sex = %s" select_datas = (5, "男") try: # 执行 SQL语句 cursor.execute(select_sql, select_datas) res = cursor.fetchmany(5) for row in res: id = row['id'] username = row['user_name'] pazzword = row['pazzword'] sex = row['sex'] age = row['age'] birthday = row['birthday'] # 打印结果 print(row) print("id=%s,username=%s,pazzword=%s,sex=%s,age=%s,birthday=%s" % \ (id, username, pazzword, sex, age, birthday)) except: raise finally: # 释放资源 cursor.close() dbConn.close()
事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。
对于支持事务的数据库, 在 Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。
所以,上面的增删改查操作应该就好理解啦。
– 求知若饥,虚心若愚。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。