版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xingzishuai/article/details/81809122
哇,闹了一个大乌龙,昨天,写了个脚本给之前移植的mysql添加数据,结果一个小问题困了我0.75天。
脚本代码如下:(期间有个小插曲,我把port=“3306”,报错了,但是很快排查到,去除可双引号)
from pymysql import cursors, connect
# 连接数据库
conn = connect(
host='127.0.0.1',
port=3306,
user='root',
password='root',
database='my_test',
charset='utf8',
cursorclass=cursors.DictCursor)
try:
with conn.cursor() as cur:
sql = '''
INSERT INTO sign_guest(realname,phone,email,sign,event_id,create_time)
VALUES ("xzs","23184739","[email protected]",0,1,NOW());
'''
cur.execute(sql)
conn.commit()
with conn.cursor() as cur:
sql = '''SELECT realname,phone,email,sign FROM sign_guest WHERE phone=%s'''
cur.execute(sql, ('23184739',))
res = cur.fetchone()
print(res)
finally:
conn.close()
怎么看都和网上找到的教程差不多啊,为毛报如下这个错呢?
秉着“我不入地狱,睡入地狱的态度”,搜索近1年相关问题的解答,总结如下:
1、修改root密码,注销后重新连接;(失败)
2、取消Mysql连接的权限认证;(失败,且不安全)
3、如我上篇《将Django2中SQLite迁移到Mysql,折腾》那样更换了root密码的认证方式;(失败)
pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
推荐https://blog.csdn.net/dongweionly/article/details/80273095,应该能解决巨大部分人的问题。(除了我)
4、新建用户,配置super user权限;(失败)
啊,什么鬼啊,workbench能连上,Django能连上,为什么啊,慢着同样是python3,为毛Django里能连上,去看看配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'my_test',
'USER': 'root',
'PASSWORD': 'root',
'HOST': 'localhost',
'PORT': '3306',
'OPTIONS': {
'init_command': "SET sql_mode='traditional'",
},
}
}
对比了下,只有这个不同:host='127.0.0.1' <--> 'HOST': 'localhost',但是脑编译告诉我,这两个是指向是一样的,不大可能是这个吧,于是继续stackoverflow,翻,翻,翻。
(这里想吐槽一下,网上很多mysql命令本身就无法运行,会报语法错误, 作者不标明环境和版本,或是从其他地方直接复制粘贴,太不负责任了,鄙视,浪费我的时间)
啊西巴!要凉了!那我把host换成localhost吧,结果好了,好了,好了!!!又是什么原因啊! 为什么不能写127.0.0.1?
conn = connect(
host='localhost', # 未解之谜:为什么不能写127.0.0.1
port=3306,
user='root',
password='root',
database='guest_test',
charset='utf8',
cursorclass=cursors.DictCursor)
注意:
没有分号:
sql = '''
INSERT INTO sign_guest(realname,phone,email,sign,event_id,create_time)
VALUES ("xzs","23184739","[email protected]",0,1,NOW());
'''
有分号:
sql = '''SELECT realname,phone,email,sign FROM sign_guest WHERE phone=%s'''