两大对象

捉住 pymysql 中的两个主要对象一切都好懂了,他们分别是 Connection(链接)Cursor(游标),下面的代码中用 concur 分别指代他们

调用库的 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() 返回一条记录,如果到达尾部返回 None
  • cur.fetchmany(n) 返回 n 条记录
  • cur.fetchall() 返回所有记录(结果集)
  • 以上方法都会使指针相应地后移

指针可以通过 cur.scroll(shift,[mode])移动,mode 默认 relative 表示相对当前位置移动;absolute 表示相对行首移动

    添加新评论 | #

    Markdown Supported
    简单数学题:NaN + NaN =
    表情

    Comments | ?? 条评论

    • 单身为狗 22 年

    • 朝循以始 夜继以终

    • Blog: Von by Bersder

    • Alive: 0 天 0 小时 0 分

    Support:

    frame ssr server DNS music player

    © 2019-2021 ᛟᛊᚺᛁᚾᛟ

    back2top