2012-06-04 4 views
0

이 사이트와 다른 많은 사이트에서 높거나 낮게 검색 한 적이 있고 비슷한 질문을 찾았지만 어느 것도 대답이 없었습니다. (대개 튜플을 고려해야합니다). 나는 html 페이지를 파싱하고 데이터베이스를 채우기 위해 파이썬 스크립트를 작성하고있다. 나는 거의 모든 것이 여기 MySQLdb가 실행됩니다.

MySQL 데이터베이스를 다루는 코드 세그먼트입니다 ... 채우는 부분을 제외하고 작업을했다 (참고 : 파이썬에서 MySQLdb 모듈 사용) 내가 처음 구문 분석과 테스트를했다

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients") 
cur = conn.cursor() 
test = "Canned Corn" 
cur.execute("INSERT INTO food (name) VALUES (%s)", (test,)) 
conn.commit() 

을 문자열이지만 작동하지 않습니다.

  1. 역 추적 (마지막으로 가장 최근 통화) : 파일이 내게이 오류 준다 "C : \ Python32 \ lib 디렉토리의 \ 사이트 - 패키지 \ MySQLdb \ cursors.py", 라인 (171)에서 실행 R = self._query (query) 파일 "C : \ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py", 330 행의 _query에 rowcount = self._do_query (q) 파일 "C : \ Python32 \ lib (1064, "SQL 구문 에서 오류가 발생했습니다. 해당 SQL 문에 해당하는 설명서를 확인하십시오. 오른쪽에있는 MySQL 서버 버전C : \ Python32 \ lib 디렉토리의 \ 사이트 - 패키지 \ MySQLdb \ cursors.py ", 라인 : 617,451,515,yntax 라인 1" 파일) 마지막

  2. 역 추적 (가장 최근 통화) "에서 ') % s의'근처를 사용하는 171, 실행 중 r = self._query (쿼리) 파일 "C : \ Python32 \ lib \ site-packages \ mysql \ cursors.py", 줄 330, _query에 rowcount = self._do_query (q) 파일 "C : \ Python32 \ lib \ site-packages \ MySQLdb \ cursors.py"294 줄의 _do_query에 있습니다. db.query (q) _mysql_exceptions.ProgrammingError : (1064, "SQL 구문에 오류가 있습니다. ; 1 호선에서 ') % s의'근처를 사용할 수있는 권리의 yntax ")에 대한 귀하의 MySQL 서버 버전에 해당하는 설명서를 확인

왜이 쿼리는


!? 작동하지 않습니다

업데이트 : 거의 내 머리카락을 꺼낸 후에 2.7.3으로 돌아가서 모든 것이 작동 함을 알았습니다. D가 그 유형의 오류 였음을 알고 있었음에 틀림 없습니다 ... 도와 주셔서 감사합니다. !

+0

@ user145896 테이블에있는 유일한 열은 이름입니까? – jcho360

+0

다음과 같이 문자열을 cat으로 시도해보십시오. str = "INSERT INTO food (name) VALUES"+ test 그리고 cur.execute (str) –

+0

@ jcho360 아니요. SQL의 데이터 – Odub

답변

1

난 당신이 어떤 까다 롭고 진보 된 SQL을 필요로하지 않는다고 생각합니다. 단지 저장해야합니다. 전자 좀 물건을 검색 할 수 있습니다. 그래서 ORM이 삶을 훨씬 편하게 해줄 것이라고 생각합니다.

나는 당신이 가을 ORM을 사용하려고 제안 :

이해하고 작업하기 쉬운 작고 간단한 ORM이다

http://pypi.python.org/pypi/autumn/0.5.1

.당신은이 같은 코드를 작성해야

http://www.sqlalchemy.org/

+0

권장 사항을 보내 주셔서 감사합니다, SQLAlchemy를 시도하고 말 그대로 같은 오류있어. 나는 그것을 지금 사용하고 있으므로 sqlalchemy를 좋아했다. :) – Odub

-2

:

파이썬에 대한 또 다른 좋은 인기 ORM이 SQLAlchemy의 당신이 파이썬을 처음 사용하는 경우

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients") 
cur = conn.cursor() 
test = "Canned Corn" 
cur.execute("INSERT INTO food (name) VALUES (%s)" % (test,)) 
conn.commit() 

을 일부 프로그래밍 경험이, 그런 다음 Dive Into Python 권의 책을 팔로우하십시오. 그 무료.

+3

%를 SQL 주입에 사용하지 않습니까? – Odub

+0

당신은 왜 SQL 주입을 너무 많이 두려워합니까? 당신은 데이터베이스이고 당신은 그것을 (나) 그렇게 사용하고 있습니다. AND SQL 주입을 여기에 적용 할 수 있다면 코드에서 쉼표를 사용하는 것이 어떻습니까 ??? – Manish

+3

@Manish - 음, SQL 인젝션으로부터 항상 보호해야합니다. – RustyTheBoyRobot

2

나는 이것도 가로 질렀다. 주변의 파고를 많이 후,이은 (값의 변화에주의) 일을 발견 :

conn = MySQLdb.connect(user="root", passwd="xxxxx",db="nutrients") 
cur = conn.cursor() 
test = "Canned Corn" 
cur.execute("INSERT INTO food (name) VALUES ({0})", (test,)) 
conn.commit() 

배경 정보 : 측정 unofficial Python packages 사이트에 게시 파이썬 3 MySQLdb의 포트, 커서의 실행 기능을합니다. py가 % 연산자 대신 format()을 사용하도록 수정되었습니다. 따라서 % s가 대체되지 않고 SQL 문에 남아있는 이유는 무엇입니까? 이러한 변경 사항이 official source으로 전달되지 않은 것으로 보입니다.

관련 문제