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 连接的时候要特别注意