您的位置:首页 > 编程语言 > Python开发

python使用SQL语句操作数据库中文乱码的解决

2015-12-10 00:00 811 查看
第一次使用python进行数据库操作,遇到了中文编码的问题,新建表出现下面异常:

_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\xb5\x81\xe5\x9f\x9f  VARCHAR(20),\n

在SQLyog里面进行sql调试语句,起初也出错,将表属性里的字符集改为'utf-8'后成功创建,而程序依然出错。心想着应该在某个函数有类似的功能.
我经过了各种编码转换;如string.decode('utf-8').encode('gbk'),然并卵...
网上也看到吐槽(参烤),因为大家忙了半天才发现原来就因为一个参数 'charset';
废话不多,贴码。

# -*- encoding: UTF-8 -*-
import MySQLdb

conn= MySQLdb.connect(
host='localhost',
port = 3306,
user='root',
passwd='1234',
charset='utf8' #这个参数...
)
cur = conn.cursor()
conn.select_db('information_schema')
fl = cur.execute("SELECT * FROM tables WHERE table_name='"+dbname+"';")
conn.select_db('Grab_Hydrology_Data')
if 0 == fl :
print 'new table:' + dbname
creatsql = "CREATE TABLE " + dbname + """
(id  VARCHAR(20)  primary key,
流域  VARCHAR(20),
行政区 VARCHAR(30),
河名 VARCHAR(30),
站名 VARCHAR(30),
时间 VARCHAR(30),
水位 VARCHAR(10),
流量 VARCHAR(10),
警x戒水位 VARCHAR(10))"""

#print creatsql
cur.execute(creatsql)
vs = ''' 省略...) '''
try:
cur.execute('INSERT INTO '+ dbname + ' VALUES (' + vs)
conn.commit() # 提交到数据库执行
except:
print '已经存在:' + vs
conn.rollback() # 发生错误时回滚
break

cur.close()
conn.close()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python mysql sql