我想将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()
上的字符串格式化期间转换所有参数
如何删除此错误?
答案 0 :(得分:1)
将它放在源代码的开头:
# -*- coding: utf-8 -*-
并且不编码已经编码的内容 - 删除my_text.encode('utf-8')
在连接呼叫中使用charset="utf8", use_unicode=True
。
表格/列中的CHARACTER SET
必须为utf8
或utf8mb4
。 latin1
不正常工作。
答案 1 :(得分:0)
您需要将序列(list
或tuple
)传递给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})