两大对象
捉住 pymysql 中的两个主要对象一切都好懂了,他们分别是 Connection(链接) 和 Cursor(游标),下面的代码中用 con 和 cur 分别指代他们
调用库的 connect 方法建立与数据库的连接,返回连接对象。连接对象掌管事务级别的处理,主要有事务的提交和回滚。
import pymysql
con = pymysql.connect(
host='localhost',
port=3306,
user='user',
pssword='pwd',
charset='utf8', #与数据库编码一致
autocommit=False #若开启自动提交,则游标每执行一次sql自动commit
)
try:
# 各种事务...
con.commit() #没有异常,提交事务
pass
except Exception as e:
con.rollback() #异常,回滚到上次commit的状态
con.close() #使用玩好哦
游标用于 sql 语句的执行和返回结果的处理,通过 con.cursor() 获取游标(通常配合 with 语句)
with con.cursor() as cur: #免去手动close
# sqls
pass
SQL执行
sql 语句都是通过cur.execute(sql,[args])
或cur.executemany(sql,[args])
两个函数执行。并且自带转义防注入功能(允许且只允许%s
占位符),参数以元组/元组列表形式输入,返回受影响的行数
cur.execute("select * from test where id=%s and content=%s",(1,'aa')) #%s不需要加引号,pymysql会自行判断
cur.executemany("insert into test values(%s,%s)",[(1,'aa',None),(2,'bb','cc')]) #None对应null
注意:
- 如果连接时没设置 autocommit,涉及数据库的写操作时需要 commit 才会生效
- 就算没有 commit,没写到数据库,自增字段还是会受影响
- 对于表的创建删除等非增删改查操作不在事务的范围,不用 commit 就能立马生效
通过cur.lastrowid
获取最后插入的自增id
查询
查询返回结果的类型与游标类型有关,其类型在创建游标时指定con.cursor(type)
,一共四种类型
pymysql.cursors.Cursor
默认类型,结果以元组形式返回pymysql.cursors.DictCursor
以字典形式返回pymysql.cursors.SSCursor
流式游标,逐条返回数据,当内存不能一次性装下数据时使用pymysql.cursors.SSDictCursor
同上
在执行查询语句之后,通过以下方法获取数据
cur.fetchone()
返回一条记录,如果到达尾部返回 Nonecur.fetchmany(n)
返回 n 条记录cur.fetchall()
返回所有记录(结果集)- 以上方法都会使指针相应地后移
指针可以通过 cur.scroll(shift,[mode])
移动,mode 默认 relative 表示相对当前位置移动;absolute 表示相对行首移动
Comments | ?? 条评论