快速指引
MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。
MySQLdb安装
在命令行中执行:
1 | $ pip install mysql-python |
MySQLdb使用
MySQLdb
导入方式
1 | #!/usr/bin/python |
MySQLdb
一般流程
Python通过MySQLdb操作MySQL数据库的一般过程:
配置数据库参数->连接数据库->获取游标对象->构造SQL语句->执行SQL语句->提交事务(write)->关闭连接
1 | # 1. 配置数据库参数:参数字典 |
<_mysql.connection open to '127.0.0.1' at 7f87bf2df620>
<MySQLdb.cursors.DictCursor object at 0x10c13af90>
INSERT INTO g_team_combine_activity_city_map (id,activity_id,city_id,create_time) VALUES (%s,%s,%s,%s) [2000, 0, 0, 0]
(1062, "Duplicate entry '2000' for key 'PRIMARY'")
连接DB
1 | # 端口是int,其他都是字符串 |
获取游标
1 | # 传入游标类型:决定了返回记录的类型,字典最常用 |
执行SQL
原型:cursor.execute(query, args=None)
query
查询语句和args
数据参数需配合使用,总体上有三种使用方式:
- 完整查询语句+数据参数None:
query
是一句完整可执行的SQL语句字符串 +args
为None; - 占位符查询语句+数据参数序列:
query
中含有占位符%s
,args
为一个序列,执行时会先使用args
中的值依次替换query
中的占位符; - 关键字占位符查询语句+数据参数字典:
query
中含有关键字占位符%(key)s
,args
为一个字典,执行时会先使用args
按关键字替换query
中的占位符;
后两种方式是将参数作为最终要插入的值,然后代入到查询语句的,而不是先代入再用SQL语句计算其值。
查询
执行查询语句
1 | # 方式一 |
6L
获取查询结果
每次获取查询结果,游标会自动后移。
1 | # 逐条获取记录:返回一个字典,每次获取,游标下移,无数据返回None |
{'city_id': 1L, 'activity_id': 1L, 'create_time': 1556865052L, 'id': 1L}
1 | # 获取指定数目的记录:返回一个字典元组,每次读取,游标都会移动 |
({'city_id': 3L, 'activity_id': 2L, 'create_time': 1556868188L, 'id': 2L}, {'city_id': 1L, 'activity_id': 45L, 'create_time': 1505969474L, 'id': 5L})
1 | # 返回全部结果,字典元组 |
({'activity_id': 71L, 'city_id': 35L, 'create_time': 1506402761L, 'id': 79L},)
插入
单条插入
‘INSERT INTO table_name (字段1,字段2,…,字段n)’ VALUES (值1,值2,…,值n)
1 | # 方式一:构造出完整SQL语句,注意这里的unix_timestamp(now())会被SQL执行 |
1 | # 执行SQL语句,提交事务,如果提交失败则回滚 |
批量插入
1 | # 普通方式 |
1 | # executemany,用于多行插入,效率比逐行插入更高 |
更新操作
1 | sql_table_str = 'g_team_combine_activity_city_map' |
删除操作
1 | sql_table_str = 'g_team_combine_activity_city_map' |
创建数据库表
1 | sql_stmt6 = """ |
(1050, "Table 't_data_status' already exists")