2016-07-07 3 views
1

MySQL과 함께 Python을 사용하는 방법을 배우고 있습니다. 동일한 쿼리는 Mysql과 PyMySQL 사이에서 다르게 작동합니다. 예 : MySQL 콘솔에서 "pages"라는 테이블을 가지고 있습니다.PyMySQL을 사용할 때 구문이 올바르지 않습니다.

INSERT INTO pages (title,content) VALUES ("test title","test content") 

그리고 이것은 작동합니다. Python에서 PyMySQL을 가져오고 연결을 만든 다음 cursor = "cur"을 입력합니다. 내가 실행할 때 :

cur.execute("INSERT INTO pages (title,content) VALUES ("test title","test content")") 

.. 잘못된 구문 : 잘못된 구문. 하지만 이것을 장소 소유자와 함께 사용해 볼 때 :

cur.execute("insert into pages (title,content) values (%s,%s)",("test title","test content")) 

그러면 작동합니다! 그래서 MySQL에서 동일한 쿼리가 작동하지만 파이썬에서는 그렇지 않은 이유가 혼란 스럽습니다. PyMySQL을 사용할 때 항상 place holder를 사용해야한다는 것을 의미합니까? 당신이 밖으로 모든시키는 데이터베이스 드라이버 그림에서 자리 주위에 따옴표를 둘 필요가 없기 때문에

감사

모든
+1

예는 매개 변수가있는 쿼리를 사용해야합니다 이러한 방식으로 문자열의 형식을 쉼표를 사용할 수 있습니다. 그러나 작동하지 않는 명령문을 보면 큰 따옴표를 어떻게 사용하고 있는지 생각해보십시오. 기본적으로 문자열을 닫고 있습니다. 대신에 작은 따옴표를 사용하면 효과가 있습니다. – sgeddes

+0

그래, 신참 같은 실수가 있습니다. –

답변

1

첫째, 마지막 버전합니다 (매개 변수 쿼리)는 가장 선호 하나를해야한다 유형 변환 및 따옴표가 자동으로 표시됩니다. 그리고, 당신은 SQL injection 공격으로부터 안전합니다.

이제 질문에 대답하십시오. 큰 따옴표 안에 큰 따옴표를 사용하려면 , 당신은 그들탈출해야합니다 당신이 연결할 수 없습니다 파이썬에서

cur.execute('INSERT INTO pages (title,content) VALUES ("test title", "test content")') 
+1

+1 SQL 주입 응답의 경우. SQL 인젝션이 악몽이기 때문에 파이썬에서 SQL 인젝션을 방지하는 방법은 [바비 테이블] (http://bobby-tables.com/python.html)에서 확인하십시오. –

+0

고마워, 지금 받으 라. –

1

:

cur.execute("INSERT INTO pages (title,content) VALUES (\"test title\", \"test content\")") 

또는 외부 따옴표 내부 따옴표를 사용 이 작업을 통해 문자열

a = "foo" 
b = "bar" 
"Foo bar" a " baz " b 

당신이하려고했던 것입니다. 대신 "Foo bar" + a + " baz " + b을 수행해야합니다. 당신이 %s 사용하는 경우, 당신은 (C의 printf 기능에 따라) 서식을 사용하는 당신은

a = "foo" 
b = "bar" 
"Foo bar %s baz %s" % (a, b) 
+0

도움을 주셔서 감사합니다, 내 문제가 나타납니다. –

관련 문제