使用python在mysql中插入unicode值

时间:2016-05-05 06:29:04

标签: python mysql unicode

我想将unicode文本插入到mysql表中,所以为此我写了下面的代码

我正在使用flask框架

import MySQLdb as ms
db = ms.connect("localhost","username","password","dbname")
cursor = db.cursor()

my_text = "का" #this is marathi lang word
enc = my_text.encode('utf-8')  #after encoding still it shows me marathi word
db_insert = "INSERT INTO TEXT(text) VALUES '{0}'"
cursor.execute(db_insert,(enc))
db.commit()

它给了我以下错误

  

TypeError:并非在行cursorxcute()

上的字符串格式化期间转换所有参数

如何删除此错误?

2 个答案:

答案 0 :(得分:1)

将它放在源代码的开头:

# -*- coding: utf-8 -*-

并且不编码已经编码的内容 - 删除my_text.encode('utf-8')

在连接呼叫中使用charset="utf8", use_unicode=True

表格/列中的CHARACTER SET必须为utf8utf8mb4latin1 正常工作。

Python checklist

答案 1 :(得分:0)

您需要将序列(listtuple)传递给params语句中的cursor.execute

db_insert = "INSERT INTO TEXT(text) VALUES (%s)"
# notice the comma at the end to convert it to tuple
cursor.execute(db_insert,(enc,)) 

您可以在documentation

中阅读更多内容
  

为什么tuple?因为DB API要求您将任何参数作为序列传递。

或者,您甚至可以使用named parameters

db_insert = "INSERT INTO TEXT(text) VALUES (%(my_text)s)"
#and then you can pass a dict with key and value
cursor.execute(db_insert, {'my_text': enc})