2013-04-24 6 views
3

9 개의 열이있는 테이블이 있습니다. 처음 세 개는 모든 텍스트이고 마지막 6 개는 INT로 설정됩니다.Python과 pymysql을 통해 MySQL에 삽입 할 수 없습니다

I 텍스트에 삽입

conn = pymysql.connect(host='', port=, user='', passwd='', db='') 
cur = conn.cursor() 
cur.execute("INSERT INTO table(Name) VALUES ('Sample Name')") 

그 코드가 잘 실행 예상대로 모든 작품 필드, 내 데이터베이스에 이름을 삽입 할 날 수 있습니다. 그러나, 내 정수 물건에 대한 삽입 문을 실행하면 모든 종류의 문제가 있습니다.

나는 다음의 모든 시도했다 :

cur.execute("INSERT INTO table(Left Avg) VALUES (5)") 
cur.execute("INSERT INTO table(Left Avg) VALUES (%s)", (5)) 
cur.execute("INSERT INTO table(Left Avg) VALUES (%s)" % (5)) 
cur.execute("""INSERT INTO mlb_data(Left Avg) VALUES (%s)""" % (5)) 

기본적으로 나는 다음과 같은 오류가 테이블에 내 정수를 삽입 할 때 내가하려고 상관없이.

Traceback (most recent call last): 
File "testing.py", line 12, in <module> 
cur.execute("""INSERT INTO mlb_data(Left Avg) VALUES (%s)""" % (5)) 
File "build/bdist.macosx-10.7-intel/egg/pymysql/cursors.py", line 117, in execute 
File "build/bdist.macosx-10.7-intel/egg/pymysql/connections.py", line 189, in  defaulterrorhandler 
pymysql.err.ProgrammingError: (1064, u"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Left Avg) VALUES (5)' at line 1") 

나는이 포함 된 VARCHAR보다는 INT로 MySQL의 태블릿을 변경하려 시도했지만,에 관계없이 언제는 내가 오류가 번호를 삽입하려고합니다.

무엇이 여기에 있습니까?

편집 : 이전에 시도하지 않았거나 형식이 잘못되었지만 알아 냈는지 알 수 없습니다.

num = 5.23947824987 
cur.execute("INSERT INTO mlb_data(LeftAvg) VALUES (%s)", (num,)) 

장애없이 작동합니다. 이게 맞습니까? 아니면 제가 아주 운이 좋았습니까?

답변

1

방법 열 이름을 '왼쪽 평균'을 가정 할

cur.execute("INSERT INTO table(`Left Avg`) VALUES (?)", (5,)) 

어때, 당신은 아마 일반적

+0

(공간을 제거한),하지만 지금 다음과 같은 오류가 발생합니다. '파일 "testing.py", 11 행, cur.execute ("INSERT INTO mlb_data ('LeftAvg') VALUES (?)", (5)) 파일 "build/bdist.macosx-10.7 -intel/egg/pymysql/cursors.py "행 105, 실행 TypeError : 문자열 형식화 중에 모든 인수가 변환되지 않았습니다. –

+2

열 이름 주변에서'''를 제거하십시오. MySQL에서 이스케이프 문자는' – aweis

+0

왜 (5,)? 그냥 (5)하지 않아야합니까? – lxx

-3

쉬운 방법 파이썬에서 INSERT에 관한 열 이름에 공백을 방지하기 위해 시도해야 연결 문자열을 사용 중입니다. 이런 식으로 뭔가 :..은 "및 '문자에

id_user = 1 
username = "Tudor" 
address = "Cluj-Napoca" 
sql = "INSERT INTO user(id_user,username,address) VALUES (" + id_user + ",'" + username + "','" + address + "');" 
cursor.execute(sql) 

그러나 많은 관심이 난 강력하게 당신의 마지막 질문에 쿼리를 실행하기 전에 대답

+4

[SQL Injections] (https://en.wikipedia.org/wiki/)까지 열리는 것은 나쁜 습관입니다. SQL_injection) – andychase

0

을 인쇄하는 것이 좋습니다 : 당신은 단지 운이있어, 및/또는 파악 또는 SQL 쿼리를 만드는 파이썬 방법을 기억하면 같은 site-packages/pymysql/tests/test_basic.py 유사한 예를 볼 수 있습니다. 좋아 그래서 (BTW 대답에 대한 감사), 나는 LeftAvg에 열 이름을 변경할 것을 시도

  v = (True, -3, 123456789012, 5.7, "hello'\" world", u"Espa\xc3\xb1ol 
", "binary\x00data".encode(conn.charset), datetime.date(1988,2,2), datetime.date 
time(2014, 5, 15, 7, 45, 57), datetime.timedelta(5,6), datetime.time(16,32), tim 
e.localtime()) 
      c.execute("insert into test_datatypes (b,i,l,f,s,u,bb,d,dt,td,t,st) 
values (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)", v)