python连接数据库及查询包含中文错误解决方法

使用MySQLdb库来连接数据库

import MySQLdb
conn = MySQLdb.connect(host='127.0.0.1',
                       user='root',
                       passwd='',
                       port=3306,
                       db='database_name',
                       charset='GBK'
                       )
# 生成游标对象
cur = conn.cursor()
sql="select * from table_name where value like '%黑客%';" # SQL语句
# print(sql)
cur.execute(sql) # 执行SQL语句
# 通过fetchall方法获得数据
data = cur.fetchall() 
 # 打印输出前4条数据
for i in data[:4]:
    print(i)
cur.close() # 关闭游标
conn.close() # 关闭连接

错误一:MySQLdb._exceptions.OperationalError: (1698, "Access denied for user 'root'@'localhost'")

解决方法:

该报错说明root不能登录,终端可以登录的情况下,查看本地mysql默认密码:cat /etc/mysql/debain.cnf

登录mysqlmysql -uroot -p,运行命令

use mysql;

UPDATE user SET plugin='mysql_native_password' WHERE User='root';

FLUSH PRIVILEGES;

exit;

service mysql restart
即可解决

错误二:包含中文无法查询

首先确定mysql的编码格式,若无法确定在连接的时候尝试更换编码格式

  conn = MySQLdb.connect(host='127.0.0.1',

                       user='root',

                       passwd='',

                       port=3306,

                       db='xxx',

                       charset='GBK' #在此确定编码格式
                       )

连数据库几个编码都要确定好:

  • 数据库自身的字符集
  • 连接是输送命令的字符集
  • 数据库返回数据的字符集

这些都统一了或者确定好一套合适的转换方案才行,特别是 ODBC 连接的时候要特别注意

posted @ 2022-01-27 11:28  JICEY  阅读(731)  评论(0编辑  收藏  举报