记录python 调用pymysql的一些坑
使用pymysql连接数据库 报错 大致意思是说pymysql 里面的_auth.py文件 里面的byte2int 没有定义,还有一些其他报错,都是引用方面的,我把引用都贴出来,记录一下
from ._compat import text_type, PY2
from .constants import CLIENT
from .err import OperationalError
from .util import byte2int,int2byte
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding
from functools import partial
import hashlib
import io
import struct
#创建数据库连接
db = pymysql.connect("地址", '用户名', '密码', '连接数据库名称')
cursor = db.cursor()
#创建表
tablesql = """ CREATE TABLE `表名称` (
DTIME datetime NOT NULL,
DATE_ONE float NOT NULL,
) ENGINE=MyISAM DEFAULT CHARSET=utf8
"""
cursor.execute(tablesql)
#查询表的所有数据
sql = "SELECT * FROM {} ".format(表名称)
cursor.execute(sql)
res = []
for x in cursor.fetchall():
res.append(x)
#按照时间段查询数据
sql = """SELECT * FROM {0} WHERE DTIME BETWEEN '{1}' AND '{2}' """.format(table, starttime, endtime)
cursor.execute(sql)
#添加数据
sql = "INSERT INTO EMPLOYEE(DTIME, DATE_ONE)VALUES (%s, %s )" % ('2018-12-4 15:00:00', '20.35')
cursor.execute(insertsql)
db.commit()
重点来了,上面的代码都没有问题,在添加数据这里居然报错了,我这里居然报错了哦,太坑了。折腾了一天,找到解决办法,居然是要给变量上面添加引号,让其编程字符串,不知道是不是和mysql版本有关系。下面是正确版本。
insertsql = """INSERT INTO atest_user (name, password) VALUES ("%s", "%s")""" % (变量1, 变量2)
在第二天又发现可以直接用execute直接进行拼接,下面举个例子
#输入sql语句进行插入数据
def mysql_insert(sql,date):
db, cursor = mysql_creat_connect()
cursor.execute(sql, date)
db.commit()
mysql_close_connect(db, cursor)
number = round(random.uniform(0, 1000), 5)
dtime = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
insertsql = """ INSERT INTO atest_doubledate (DTIME,DATE_ONE) VALUES (%s,%s)"""
mysql_insert_sql(insertsql, [dtime, number])
#ok,完全没有问题。
我的代码把sql语句改成这样就完全没有问题可以开心的执行添加数据了。
随笔记录,自己工作中碰到的问题,以及解决办法,大神勿喷。