我是Python的新手,但是还没有找到关于如何做的好参考。我想我可能会对如何使用Unicode字符/字符串感到困惑。
我尝试创建参数化查询以使用Unicode字符,插入并从MySQL数据库中选择以下值:
valueUTF8 = u"Программирование - プログラミング"
valueSpecialCharacters = u"`~!@#$%^&*()_+[]\\;',./{}|:\"<>?"
valueSpecialCharacters2 = u"¢¥¦§©«¬®æƸɅɆɜʘɷɸӒӔӥӺӾسشصضطّ٦۞۩ᴚᴇᴈᵺḈᵯἃἮᾝᾸ₨₸∑∏∆∂℮ⅎ₲∩∫≈≠≡≤≥⌂℗⅝⅞⅓⅔⅛⅜⅍"
valueSpecialCharacters3 = u"░▒▓■□▪▫▬▲►▼◄◊○◌●◘◙◦☺☻☼♀♂♠♣♥♦♪♫♯ⱠⱡⱢⱣⱤⱥⱦⱧﭮצּרּﭓךּﺹﻏ﷼ﻪﻯﻴﻹ ﻼ"
一旦我完成这些工作,我打算将它们用作某些单元测试的一部分。
答案 0 :(得分:0)
所以我的主要问题是我错过了我的数据库连接字符串中的charset="utf8"
。在我拥有之后,其他一切都很简单。
下面是我的一些测试代码,作为参考,以防其他人遇到同样的问题。它会将特殊值插入到一个db中,然后从该db读取它们并将其插入到不同的db中。我使用第三方工具查询数据库并验证结果。我做的最后一次测试是基于名称的删除:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import MySQLdb
db1 = MySQLdb.connect(host="10.100.10.2",
user="root",
passwd="",
db="db1",
charset="utf8"
)
db1.autocommit(True)
cur1 = db1.cursor()
db2 = MySQLdb.connect(host="10.100.10.2",
user="root",
passwd="",
db="db2",
charset="utf8"
)
db2.autocommit(True)
cur2 = db2.cursor()
valueSpecialCharacters = u"`~!@#$%^&*()_+[]\\;',./{}|:\"<>?"
valueSpecialCharacters2 = u"¢¥¦§©«¬®æƸɅɆɜʘɷɸӒӔӥӺӾسشصضطّ٦۞"
valueSpecialCharacters3 = u"۩ᴚᴇᴈᵺḈᵯἃἮᾝᾸ₨₸∑∏∆∂℮ⅎ₲∩∫≈≠≡≤≥⌂℗⅝⅞"
valueSpecialCharacters4 = u"⅓⅔⅛⅜⅍░▒▓■□▪▫▬▲►▼◄◊○◌●◘◙◦☺☻☼♀♂♠♣"
valueSpecialCharacters5 = u"♥♦♪♫♯ⱠⱡⱢⱣⱤⱥⱦⱧﭮצּרּﭓךּﺹﻏ﷼ﻪﻯﻴﻹ ﻼ"
sqlInsert = "INSERT INTO table (tableID, Name) VALUES (%s, %s);"
# Clean tables to make easier to see updates.
cur1.execute("DELETE FROM table")
cur2.execute("DELETE FROM table")
print "1: " + valueSpecialCharacters
args = "1", valueSpecialCharacters
cur1.execute(sqlInsert, args)
print "2: " + valueSpecialCharacters2
args = "2", valueSpecialCharacters2
cur1.execute(sqlInsert, args)
print "3: " + valueSpecialCharacters3
args = "3", valueSpecialCharacters3
cur1.execute(sqlInsert, args)
print "4: " + valueSpecialCharacters4
args = "4", valueSpecialCharacters4
cur1.execute(sqlInsert, args)
print "5: " + valueSpecialCharacters5
args = "5", valueSpecialCharacters5
cur1.execute(sqlInsert, args)
sqlSelect = "SELECT tableID, Name FROM table;"
cur1.execute(sqlSelect)
results = cur1.fetchall()
for row in results:
args = row[0], row[1]
print "args: %s", args
cur2.execute(sqlInsert, args)
# Test of deleting with utf-8
sqlDelete = "DELETE FROM table2 WHERE Name = %s;"
cur1.execute(sqlDelete, valueSpecialCharacters2)
db1.close()
db2.close()