Python3连接MySQL
本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用。
PyMySQL介绍
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。
Django中也可以使用PyMySQL连接MySQL数据库。
PyMySQL安装pipinstallpymysql
连接数据库
注意事项
在进行本文以下内容之前需要注意:你有一个MySQL数据库,并且已经启动。
你有可以连接该数据库的用户名和密码
你有一个有权限操作的database
基本使用#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
#定义要执行的SQL语句
sql="""
CREATETABLEUSER1(
idINTauto_incrementPRIMARYKEY,
nameCHAR(10)NOTNULLUNIQUE,
ageTINYINTNOTNULL
)ENGINE=innodbDEFAULTCHARSET=utf8;
"""
#执行SQL语句
cursor.execute(sql)
#关闭光标对象
cursor.close()
#关闭数据库连接
conn.close()
返回字典格式数据:#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句并且将结果作为字典返回的游标
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
#定义要执行的SQL语句
sql="""
CREATETABLEUSER1(
idINTauto_incrementPRIMARYKEY,
nameCHAR(10)NOTNULLUNIQUE,
ageTINYINTNOTNULL
)ENGINE=innodbDEFAULTCHARSET=utf8;
"""
#执行SQL语句
cursor.execute(sql)
#关闭光标对象
cursor.close()
#关闭数据库连接
conn.close()
注意:
charset=“utf8”,编码不要写成"utf-8"
增删改查操作
增#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
sql="INSERTINTOUSER1(name,age)VALUES(%s,%s);"
username="Alex"
age=18
#执行SQL语句
cursor.execute(sql,[username,age])
#提交事务
mit()
cursor.close()
conn.close()
插入数据失败回滚
在执行增删改操作时,如果不想提交前面的操作,可以使用 rollback() 回滚取消操作。#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
sql="INSERTINTOUSER1(name,age)VALUES(%s,%s);"
username="Alex"
age=18
try:
#执行SQL语句
cursor.execute(sql,[username,age])
#提交事务
mit()
exceptExceptionase:
#有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
获取插入数据的ID(关联操作时会用到)#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
sql="INSERTINTOUSER1(name,age)VALUES(%s,%s);"
username="Alex"
age=18
try:
#执行SQL语句
cursor.execute(sql,[username,age])
#提交事务
mit()
#提交之后,获取刚插入的数据的ID
last_id=cursor.lastrowid
exceptExceptionase:
#有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
批量执行#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
sql="INSERTINTOUSER1(name,age)VALUES(%s,%s);"
data=[("Alex",18),("Egon",20),("Yuan",21)]
try:
#批量执行多条插入SQL语句
cursor.executemany(sql,data)
#提交事务
mit()
exceptExceptionase:
#有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
删#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
sql="DELETEFROMUSER1WHEREid=%s;"
try:
cursor.execute(sql,[4])
#提交事务
mit()
exceptExceptionase:
#有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
改#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
#修改数据的SQL语句
sql="UPDATEUSER1SETage=%sWHEREname=%s;"
username="Alex"
age=80
try:
#执行SQL语句
cursor.execute(sql,[age,username])
#提交事务
mit()
exceptExceptionase:
#有异常,回滚事务
conn.rollback()
cursor.close()
conn.close()
查
查询单条数据#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
#查询数据的SQL语句
sql="SELECTid,name,agefromUSER1WHEREid=1;"
#执行SQL语句
cursor.execute(sql)
#获取单条查询数据
ret=cursor.fetchone()
cursor.close()
conn.close()
#打印下查询结果
print(ret)
查询多条数据#导入pymysql模块
importpymysql
#连接database
conn=pymysql.connect(host=“你的数据库地址”,user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
#得到一个可以执行SQL语句的光标对象
cursor=conn.cursor()
#查询数据的SQL语句
sql="SELECTid,name,agefromUSER1;"
#执行SQL语句
cursor.execute(sql)
#获取多条查询数据
ret=cursor.fetchall()
cursor.close()
conn.close()
#打印下查询结果
print(ret)
进阶用法#可以获取指定数量的数据
cursor.fetchmany(3)
#光标按绝对位置移动1
cursor.scroll(1,mode="absolute")
#光标按照相对位置(当前位置)移动1
cursor.scroll(1,mode="relative")