Bit0r

前言

Python有很多MySQL驱动,其中mysql-connector是oracle官方推出的MySQL驱动,本文介绍其用法

安装

这是Ubuntu下的安装方法,其它安装方法我也不会(:

sudo apt install mysql-connector-python

连接

操作数据库,首先要连接数据库

import mysql.connector

cnx = mysql.connector.connect(user='root',
                              password='$troNgP@$$w0rd',
                              database='wrmyx',
                              autocommit=True)

连接方法

连接数据库的方法是connect,它接受一些连接参数,返回一个数据库连接句柄

参数

connect可以函数接受接受很多参数,这里重点其中几个参数

查询

cursor = cnx.cursor(prepared=True)

query = '''
SELECT activation_code
FROM download_link
WHERE id = ?
'''

cursor.execute(query, (193, ))

# result=list(cursor)
for (activation, ) in cursor:
    print(activation)

cursor.close()

获取游标

要进行查询,首先要获取一个cursor(游标),参数prepared=True表示开启SQL准备,这个不能省略

执行SQL

cursorexecute方法用于执行一个准备好的SQL语句。 其第一个参数是一个字符串——预处理SQL语句,第二个参数是一个元组——传入的参数。

当一个SQL语句第一次被执行时会进行准备,而后这个语句就会被缓存,第二次执行相同的语句就会直接传递参数。

语句中的?是占位符,每个?占位符都与元组中的元素相对应。

拉取结果集

调用过execute方法后可以对cursor进行迭代,每次迭代将返回结果集中的一行,每一行被表示为一个tuple

拉取全部

如果想直接拉取全部结果,可以用list(cursor)来获取一个包含所有元组的列表

游标重用

一个游标可以进行重复查询,但是需要确保游标的结果集已经为空——即所有的行都被拉取

关闭游标

不再使用的游标需要调用close进行关闭。

插入多行

query = '''
INSERT INTO download_link (id, download)
VALUES (?, ?)
'''
cursor.executemany(query, [(1, 'http://example.com'),
                           (2, 'http://second.example.com')])

有一个专门进行多行插入的方法executemany。 该方法第一个参数还是查询语句,但第二个参数需要传递一个参数元组的可迭代对象。

这个方法执行时会转换查询语句来提升插入效率,例如上面的查询语句将被转换为:

INSERT INTO download_link (id, download)
VALUES (?, ?), (?, ?)

关闭连接

# cnx.commit()
cnx.close()

提交

如果没有开启自动提交模式,则需要使用commit方法手动提交事务。

关闭连接

close方法用于关闭连接,此时所有cursor都将被关闭