Parksi

Python中使用SQL数据库 -PyMySQL

2020-04-22 · 2 min read
Python SQL

Python是一门简单但强大的语言,本期我们来借助PyMySQL 实现python对SQL数据库的操作。

准备

pip install pymysql

使用

建立连接

import pymysql
s = pymysql.connect(HOST, USER, PWD, DATABASH, PORT)
  1. HOST为数据库主机,如果在本地,一般为127.0.0.1,为str
  2. USER为用户名,为str
  3. PWD对应用户名的密码,为str
  4. DATABASH数据库,为str
  5. PORT端口,可选,缺省为3306,为int

游标

每一个游标都是一个可以被操作的单位,我们执行SQL命令与接收返回数据都是通过游标实行的。

创建

c = s.cursor()

c就是这个游标的名称

关闭

c.close()

执行SQL语句

c.execute(SQL)
  1. SQL即为执行的sql语句
  2. 本方法适合固定的查询,不涉及任何变量
c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', (a, b, c, d))
  1. 单引号内即为执行的sql语句
  2. 变量用?代替
  3. 在逗号后放入变量

获取查询结果

c.execute(SQL)
c.fetchall()

返回所有匹配结果,为嵌套数组

c.execute(SQL)
c.fetchone()

返回唯一匹配结果,为数组

c.execute(SQL)
c.fetchmany(size)
  1. 返回指定行的数据
  2. size为返回行数,为int

事务性

SQL是事务性的,这个特性非常重要,例如银行:转账失败后不仅要加上原来减去的金额,同时也要检查被转账的账户是否操作成功。

  • 当操作部分成功,部分失败,可以通过回滚撤销操作
    所有需要数据库做出改变的语句都需要提交

提交

c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', (a, b, c, d))
s.commit()

事务操作是对数据库的不是对游标的

回滚

s.rollback()

示例

一次完整事务的示例

s = pymysql.connect(HOST, USER, PWD, DATABASH, PORT)

c = s.cursor()
try:
    c.executemany('INSERT INTO stocks VALUES (?,?,?,?,?)', (a, b, c, d))
    s.commit()
except:
    s.rollback()
finally:
    c.close()
    s.close()

同时这也是try/except/finally的典型应用.