Python笔记:MySQL的调用

Python 3.x版本不再支持MySQLdb,也可以选择pymysql、MySQL connector,或者用pandas自带的数据库读写功能。
MySQL Connector/Python 是MySQL官方提供的Python连接MySQL数据库的驱动程序。这篇主要记录其基本用法。

安装

可以直接使用下列命令安装:

1
pip install mysql-connector-python

也可以从官方下载mysql-connector-python的安装包使用。

使用

1. 建立连接

1
2
3
4
5
6
7
8
9
10
11
12
import mysql.connector
config={'host':'127.0.0.1',#默认127.0.0.1
'user':'root',
'password':'123456',
'port':3306 ,#默认即为3306
'database':'test',
'charset':'utf8'#默认即为utf8
}
try:
cnn=mysql.connector.connect(**config)
except mysql.connector.Error as e:
print('connect fails!{}'.format(e))

2. 执行语句

1
2
3
cur=conn.cursor()
cur.execute("show databases")
cur.fetchall()

3. 创建表格

1
2
3
4
5
6
7
8
9
10
11
12
sql_create_table='CREATE TABLE `student` \
(`id` int(10) NOT NULL AUTO_INCREMENT,\
`name` varchar(10) DEFAULT NULL,\
`age` int(3) DEFAULT NULL,\
PRIMARY KEY (`id`)) \
ENGINE=MyISAM DEFAULT CHARSET=utf8'

cursor=cnn.cursor()
try:
cursor.execute(sql_create_table)
except mysql.connector.Error as e:
print('create table orange fails!{}'.format(e))

4. 插入数据

插入数据的语法上和MySQLdb上基本上是一样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cursor=cnn.cursor()
try:
#第一种:直接字符串插入方式
sql_insert1="insert into student (name, age) values ('orange', 20)"
cursor.execute(sql_insert1)
#第二种:元组连接插入方式
sql_insert2="insert into student (name, age) values (%s, %s)"
#此处的%s为占位符,而不是格式化字符串,所以age用%s
data=('shiki',25)
cursor.execute(sql_insert2,data)
#第三种:字典连接插入方式
sql_insert3="insert into student (name, age) values (%(name)s, %(age)s)"
data={'name':'mumu','age':30}
cursor.execute(sql_insert3,data)
#如果数据库引擎为Innodb,执行完成后需执行cnn.commit()进行事务提交
except mysql.connector.Error as e:
print('insert datas error!{}'.format(e))
finally:
cursor.close()
cnn.close()

同样,MySQL Connector也支持多次插入,同样其使用的也是cursor.executemany,示例如下:

1
2
3
4
5
6
stmt='insert into student (name, age) values (%s,%s)'
data=[
('Lucy',21),
('Tom',22),
('Lily',21)]
cursor.executemany(stmt,data)

5. 查询操作

1
2
3
4
5
6
7
8
9
10
11
cursor=cnn.cursor()
try:
sql_query='select id,name from student where age > %s'
cursor.execute(sql_query,(21,))
for id,name in cursor:
print('%s\'s age is older than 21,and her/his id is %d'%(name,id))
except mysql.connector.Error as e:
print('query error!{}'.format(e))
finally:
cursor.close()
cnn.close()

6. 删除操作

1
2
3
4
5
6
7
8
9
10
cursor=cnn.cursor()
try:
sql_delete='delete from student where name = %(name)s and age < %(age)s'
data={'name':'orange','age':24}
cursor.execute(sql_delete,data)
except mysql.connector.Error as e:
print('delete error!{}'.format(e))
finally:
cursor.close()
cnn.close()

7. 关闭连接

1
conn.close()