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
可以函数接受接受很多参数,这里重点其中几个参数
user
是MySQL登录用户password
是MySQL的连接密码(可选)host
是连接的主机,默认是127.0.0.1
(可选)port
是连接的端口,默认是3306
(可选)database
是默认选择的数据库(可选)autocommit
指示是否开启自动提交模式,默认为False
(可选)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准备,这个不能省略
cursor
的execute
方法用于执行一个准备好的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
都将被关闭