2014-09-04 81 views
1

我是python的新手,所以我对某些事情表示歉意,我认为这是一个简单的问题,但一直未能找到有关如何执行此操作的良好参考。我想我可能会对如何使用unicode字符/字符串感到困惑。具有特殊字符和UTF-8字符的Python参数化查询

我试图创建参数化查询从MySQL数据库的下列值Unicode字符工作,插入和选择/:

valueUTF8 = u"Программирование - プログラミング" 
valueSpecialCharacters = u"`[email protected]#$%^&*()_+[]\\;',./{}|:\"<>?" 
valueSpecialCharacters2 = u"¢¥¦§©«¬®æƸɅɆɜʘɷɸӒӔӥӺӾسشصضطّ٦۝۞۩ᴚᴇᴈᵺḈᵯἃἮᾝᾸ₨₸∑∏∆∂℮ⅎ₲∩∫≈≠≡≤≥⌂℗⅝⅞⅓⅔⅛⅜⅍" 
valueSpecialCharacters3 = u"░▒▓■□▪▫▬▲►▼◄◊○◌●◘◙◦☺☻☼♀♂♠♣♥♦♪♫♯ⱠⱡⱢⱣⱤⱥⱦⱧﭮצּרּﭓךּﺹﻏ﷼ﻪﻯﻴﻹ ﻼ" 

,一旦我得到这些工作,我打算把它们作为部分单元测试。任何帮助表示赞赏。

+1

问题是什么?所有这些都是unicode目前你可能只是插入他们....你到目前为止尝试过什么?你得到了什么错误?这可能对你有帮助http://stackoverflow.com/questions/6202726/writing-utf-8-string-to-mysql-with-python – 2014-09-04 23:47:16

+0

我已经为别人交易了一堆错误。我记得的一件事是它抱怨拉丁文字。我很好奇,如果我需要将字符串解码为utf8或unicode,然后使用它。我仍然在玩它,我会明天看看你发送的链接,看看有没有睡眠可以帮助我明天更好地发现它。 – 2014-09-05 00:07:16

+1

具体http://stackoverflow.com/a/6203001/541038这个回答 – 2014-09-05 00:08:38

回答

0

所以我的主要问题是,我错过了我的db连接字符串中的charset="utf8"。在我有了之后,其他一切都很简单。

下面是我的一些测试代码,作为参考,以防其他人遇到相同的问题。它将特殊值插入到一个数据库中,然后从该数据库读取它们并将其插入到不同的数据库中。我使用了第三方工具来查询数据库并验证结果。我做的最后一个测试是基于名称的删除:

#!/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"`[email protected]#$%^&*()_+[]\\;',./{}|:\"<>?" 
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()