pymysql是python的一个mysql数据库操作模块,本文记录mymysql的入门教程,和常见错误汇总。
一、pymysql是什么?
pymysql是python提供的一个第三方mysql模块,用于与mysql服务器建立连接,进行对数据库的增删查改。
二、使用步骤
1.安装,引入库
代码如下(示例):
安装直接dos界面pip install pymysql
import pymysql
2.创建数据库
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306)
cursor = db.cursor()
cursor.execute("CREATE DATABASE job2 DEFAULT CHARACTER SET utf8")
db.close()
3.建表
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306, db='job2')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS items (id VARCHAR(255) NOT NULL,title VARCHAR(255) NOT NULL,content VARCHAR(255) ' \
',state VARCHAR(255) NOT NULL,add_time VARCHAR(255) NOT NULL,end_time VARCHAR(255) NOT NULL,' \
'PRIMARY KEY (id))'
cursor.execute(sql)
db.close()
4.可以先定义一个执行SQL语句的函数,方便重复数据库
传入sql语句和sql语句中的参数
def executeSql(sql, values):
db = pymysql.connect(host='localhost', user='root', password='123456', port=3306,
db='job2')
cursor = db.cursor()
try:
cursor.execute(sql, values)
db.commit()
except:
db.rollback()
print("error")
db.close()
5.插入数据
sql = 'INSERT INTO items(id,title,content,state,add_time,end_time)
value(%s,%s,%s,%s,%s,%s)'
values = (get_id, get_title, get_content, state, get_addtime, get_deadtime)
executeSql(sql, values)
6.删除数据
这边是根据id删除数据,其他方式同理
sql = 'DELETE FROM items WHERE id = %s'
values = id
executeSql(sql, values)
7.查找数据
分页查找,page是页码,limit是每页的数据量
数据以元组的方式返回
sql = 'select * from items limit %s,%s'
values = ((int(page) - 1) * int(limit), int(limit))
cursor.execute(sql, values)
data = cursor.fetchall()
8.修改数据
根据id修改数据,其他方式同理
sql = 'UPDATE items SET state = %s WHERE id = %s'
values = (state, id)
executeSql(sql, values)
pymysql常见错误汇总:
插入的内容中有'或者"会报错1054、1064等,这主要是因为在MySQL中,为了区分MySQL的关键字与普通字符,MySQL引入了一个反引号,和python的'有冲突引起的。正确插入方法:
insert = "insert into page_info_list(标题,正文,搜索词,原网址,评论数) values('%s','%s','%s','%s','%d')" % ( page_title, page_detail, sousuoci, page_url, comment_sum)
外面用",里面用'。
关于mysql中插入含有英文单引号和双引号引起的幺蛾子非常多,比如在插入列表的时候,列表是用单引号,假如你的'%s'是单引号,就会出错,必须用"。假如你要插入的是纯字符串,那很好处理,pymysql有一个单独的处理函数escape_string,用这个函数处理就不会出错。
from pymysql.converters import escape_string
page_title = escape_string(escape_string)
但是假如你插入的是列表,由于列表不能用这个转义,就需要用"%s"才行,否则要报错……
今天阅读了下pymysql源文件,发现converters里面也有处理列表、字典等数据类型的函数,只不过这个网上搜索不到……
分别为:
escape_dict字典
escape_sequence列表
escape_set集合
escape_timedelta日期
处理列表用下面这个
from pymysql.converters import escape_sequence
处理列表的话
content_list = escape_sequence(content_list, 'utf8mb4'),
当然也可以用替换,原文替换掉英文引号,我也尝试过。
这个问题折腾我很久,还是直接读文档和源文件吧