2014-09-04 5 views
1

저는 파이썬에 익숙하지 않으므로 쉽게 질문하는 것으로 사과합니다. 그러나 그것을 수행하는 방법에 대한 좋은 참조를 찾을 수 없었습니다. 유니 코드 문자/문자열을 사용하는 방법에 대해 혼란 스러울 수도 있습니다. 나는 다음과 같은 값에 대한 MySQL의 DB로/유니 코드 문자로 작업을 삽입하고 선택 매개 변수화 된 쿼리를 만들려고 해요특수 문자와 UTF-8 문자로 된 파이썬 매개 변수화 된 쿼리

: 나는이 내가 작업을 받으면

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 –

+0

나는 다른 사람들에게 많은 실수를 저질렀습니다. 내가 기억하는 한 가지는 라틴어 리터럴에 대해 불평하는 것입니다. 내가 문자열을 utf8 또는 유니 코드로 디코딩해야한다면 궁금하다. 나는 아직도 그걸 가지고 놀고 있는데, 네가 아마도 내일 보낸 링크를보고, 어떤 수면이 내일 더 잘 이해하는 데 도움이되는지 알아 보겠다. –

+1

특히 http://stackoverflow.com/a/6203001/541038이 대답 –

답변

0

그래서 내 주요 문제는 내 db 연결 문자열에 charset="utf8"이 누락되었다는 것이 었습니다. 그 일이 끝나면 다른 모든 일은 쉬웠습니다.

다음은 다른 테스트 케이스가 동일한 문제를 일으키는 경우를 대비해 참고할 테스트 코드입니다. 하나의 db에 특수 값을 삽입 한 다음 해당 db에서 해당 값을 읽고이를 다른 db에 삽입합니다. 제 3 자 도구를 사용하여 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"`[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()