一、MySQL的驱动库
MySQLdb
最有名的库。支持Python 2,但不支持Python3
pymysql
语法兼容MySQLdb,使用Python写的库,支持Python 3
二、导入库
import pymysql
三、一般流程
-1. 建立连接 2.获取游标 3. 执行SQL 4.提交事务 5.释放资源
(一)建立连接
pymsql.connect()方法
返回的是Connections模块下的Connection实例
其Connection初始化常用参数及说明
host 主机:常为localhost或ip地址
user 用户名
password 密码
database 数据库
port 端口:常为3306
为了判断是否正确连接数据库,使用Connection.ping()方法。
conn = pymysql.connect(ip,user,password,database,port)
conn.ping(False)
(二)获取游标
cursor = conn.cursor()
(三)执行SQL
例:
sql = "insert into table (name,age) values ('tom{}',18)".format(i)
cursor.execute(sql)
(四)提交事务
conn.commit()#将变更提交
conn.rollback()#回滚事务
(五)释放资源
conn.close()#关闭连接
cursor.close()#释放游标
为了出现异常后能提示用户,使用try: except:finally:对异常情况进行处理.
import pymysql
cursor = None
conn = None
try:
conn = pymysql.connect(ip,user,password,database,port)
cursor = conn.cursor()
sql = "select * from table"
cursor.execute(sql)
conn.commit()
except:
conn.rollback()
finally:
if conn:
conn.close()
if cursor:
cursor.close()
四、执行sql语句
使用execute(sql,args)方法注意事项:
- execute方法中sql语句占位符是%s,%s必须用括号()
- args一般是list或tuple格式,如果只有一个参数,可直接传入
1.插入数据,修改数据,删除数据时,即不需要返回数据时
conn = pymysql.connect(ip,user,password,database,port)
cursor = conn.cursor()
sql = "sql语句(insert/alter/drop"
cursor.execute(sql,args)
conn.commit()
cursor.close()
conn.close()
2.查询数据,需要返回数据时
conn = pymysql.connect(ip,user,password,database,port)
cursor = conn.cursor()
sql = "sql语句"
cursor.execute(sql,args)
result = cursor.fetchone()#将数据读出
conn.commit()
cursor.close()
conn.close()
读取数据的方法:
- fetchone()
获取结果集的下一行
- fetchmany(size=None)
size指定返回的行数,None则返回空元组
- fetchall()
返回剩下的所有行,如果走到末尾,就返回空元组,否则返回一个元组,其元素是每一行的记录封装的一个元组
- cursor.rownumber
返回当前行号.可以修改,支持负数
- cursor.rowcount
返回的总行数
防范SQL注入攻击的方法
参数化查询,可以有效防止注入攻击,并提高查询的效率
Cursor.execute(query,args=None)
args必须是元组 列表或字典,如果查询字符串使用%(name)s,就必须使用字典.
sql = "select * from table where name like %(name)s and age < %(age)s"
cursor.execute(sql,{'name':'tom%','age':25})