一开始看菜鸟教程讲的是MySQLdb,后来发现这个库只支持2.x不支持3.x,于是换了pymysql。
这里用的数据库是mysql5.7.20,数据管理工具使用的Navicat Premium。
1.首先安装pymysql库
pip install pymysql
注:因为已经安过了,所以这里提示Requirement already satisfied。
因为要用mysql,所以首先启动mysql
首先进入管理员下的命令提示符(win+x->a)
net start mysql
注:关闭mysql:
net stop mysql
在navicat上连接数据库,并建立一个demo的数据库以及一个叫db的表
2.测试增删改查
host,port,user分别对应下图。passwd=密码,文中是123456;db=数据库名字,文中是demo。
查询
# 导入 pymysql
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", user="root",passwd="123456", db="demo", port=3306)
# 使用cursor()方法获取操作游标
cur = db.cursor()
# 1.查询操作
# 编写sql 查询语句,db是表名
sql = "select * from db"
try:
cur.execute(sql) # 执行sql语句
res = cur.fetchall() # 获取查询的所有记录
print("id", "name", "passwd")
# 遍历结果
for row in res:
id = row[0]
name = row[1]
passwd = row[2]
print(id, name, passwd)
except Exception as e:
raise e
finally:
db.close() # 关闭连接
注:
fetchall() :返回多个元组,即返回多个记录(rows),如果没有结果 则返回 ()
fetchone() :返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None
在MySQL中是NULL,而在Python中则是None
例如:
sql = "select id,username,passwd from db"
try:
cur.execute(sql)
res = cur.fetchone()
print("id", "name", "passwd")
print(res[0],res[1],res[2])
fetchone() 只取最上面的第一条结果
插入
import pymysql
db = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='demo')
cur=db.cursor()
sql_insert = """insert into db(id,username,passwd) values(4,'dada','233')"""
try:
cur.execute(sql_insert)
db.commit()
except Exception as e:
db.rollback()#错误回滚
finally:
db.close()
更新
import pymysql
db = pymysql.connect(host="localhost", user="root",passwd="123456", db="demo", port=3306)
cur = db.cursor()
sql_update = "update db set passwd = '%s' where id = %d" % ("555", 4)
try:
cur.execute(sql_update)
db.commit()
except Exception as e:
db.rollback()
finally:
db.close()
删除
import pymysql
db = pymysql.connect(host='localhost',user='root',passwd='123456',port=3306,db='demo')
cur = db.cursor()
sql_delete = "delete from db where id = %d"%(4)
try:
cur.execute(sql_delete)
db.commit()
except Exception as e:
db.rollback()
finally:
db.close()