pymysql入门教程和常见错误汇总

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'),

当然也可以用替换,原文替换掉英文引号,我也尝试过。

这个问题折腾我很久,还是直接读文档和源文件吧