首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql-connector-python不能处理GBK字符串"赵孟頫“

mysql-connector-python不能处理GBK字符串"赵孟頫“
EN

Stack Overflow用户
提问于 2013-07-10 18:49:18
回答 1查看 230关注 0票数 1

看看python shell中的代码:

代码语言:javascript
复制
>>> s = u'赵孟頫'.encode('gbk')
>>> s
'\xd5\xd4\xc3\xcf\xee\\'

'赵孟頫‘的最后一个字节是\x5c,与反斜杠相同。这会导致sql错误。

代码语言:javascript
复制
mysql.connector.errors.ProgrammingError: 1064 (42000): 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 ''?????\\')' at line 4

下面是我的代码:

代码语言:javascript
复制
# db is mysql.connector object
sql = '''
    INSERT INTO scraped_products(
        site_prd_id,site_id,brand)
    VALUES(
        %(site_prd_id)s,%(site_id)s,%(brand)s)
    '''
dat = {
    'site_prd_id' : 'test',
    'site_id' : 1,

    'brand' : u'赵孟頫'.encode('gbk'),
}
self.db.ping(True, 3, 1)
self.db.cursor().execute(sql, dat)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-15 20:04:13

我有一个解决方案,这将需要一些额外的工作,使其工作。下面的代码示例将数据转换为MySQL Hexadecimal Literal并将其发送到MySQL,而不对其进行转义、引用或转换。这是一种有点不同的执行查询的方式,但我希望它能暂时发挥作用:

代码语言:javascript
复制
import mysql.connector

cnx = mysql.connector.connect(database='test', user='root',
                              charset='gbk', use_unicode=False)
cur = cnx.cursor()

cur.execute("DROP TABLE IF EXISTS gbktest")
table = (
    "CREATE TABLE gbktest ("
    "id INT AUTO_INCREMENT KEY, "
    "c1 VARCHAR(40)"
    ") CHARACTER SET 'gbk'"
)
cur.execute(table)

def gbk_to_hexstr(value):
    """Convert value to Hexadecimal Literal for MySQL
    """
    return "0x{0}".format(''.join(
        ["{0:x}".format(ord(c)) for c in value.encode('gbk')]))

# Convert your Unicode data using gbk_to_hexstr
data = {
    'c1' : gbk_to_hexstr(u'赵孟頫'),
}

# Use MySQLCursor.execute() _not_ passing data as second argument
cur.execute("INSERT INTO gbktest (c1) VALUES ({c1})".format(**data))
cur.execute("SELECT c1 FROM gbktest")

# Print the inserted data as Unicode
for row in cur:
    print(row[0].decode('gbk').encode('utf8'))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17568702

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档