2014-04-29 4 views
0

내 스크립트에 문제가 있습니다. 나는 아래지고있어 오류가fout의 구문 오류

File "./filter.py", line 12 
with open('test.txt') as f: 
     ^
SyntaxError: invalid syntax 

내가 아래 사용하고있어이 인 코드입니다.

with open('test.txt') as f: 
    for row in f:         
     cur.execute("DELETE FROM filterstagetbl where filtersetidn IN (select filtersetidn from filtersettbl where name = '"+row.strip()+"'") 
     cur.execute("DELETE FROM filtersetaccesstbl where filtersetidn IN (select filtersetidn from filtersettbl where name = '"+row.strip()+"'") 
     cur.execute("DELETE FROM filtersetmembertbl where filtersetidn IN (select filtersetidn from filtersettbl where name = '"+row.strip()+"'") 
     cur.execute("UPDATE filtersettbl set status = 4 where name = '"+row.strip()+"'") 
    conn.commit() 

스크립트는 기본적으로 DB에 연결하고, 파일을 찾고 파일의 입력을 기준으로 삭제합니다.

+3

여기에 몇 가지 문제가 있습니다. 들여 쓰기가 발생하므로 게시 문제와 실제 들여 쓰기 문제를 구분할 수 없습니다. 실제 오류 메시지를 포함하지 못했습니다. 실제로 SQL 매개 변수를 대신 사용해야 할 때 문자열 보간을 사용하면 안됩니다. –

+0

죄송합니다. 나는 원래 코드를 가지고 시작했는데, 그 코드를 가지고 시작했다. – Shifty

+0

아직'* with * '문을 가지고 있지 않은 파이썬의 구버전을 사용하고 있습니다 .. –

답변

0

with 문이 Python 2.5에 추가되었습니다. 그보다 오래된 버전을 사용해야합니다.

파이썬을 업그레이드하거나 with 문을 사용하지 마십시오.

for row in f: 
    params = (row.strip(),) 
    cur.execute("DELETE FROM filterstagetbl where filtersetidn IN (select filtersetidn from filtersettbl where name = ?", 
       params) 
    cur.execute("DELETE FROM filtersetaccesstbl where filtersetidn IN (select filtersetidn from filtersettbl where name = ?", 
       params) 
    cur.execute("DELETE FROM filtersetmembertbl where filtersetidn IN (select filtersetidn from filtersettbl where name = ?", 
       params) 
    cur.execute("UPDATE filtersettbl set status = 4 where name = ?", 
       params) 

는거야 : 당신은 정말 대신 문자열 조작을 사용하는 행 데이터를 보간하는 SQL 매개 변수를 사용한다

f = open('test.txt') 
try: 
    for row in f: 
     # ... 
finally: 
    f.close() 

: 당신은 파일 개체가 닫혀 있는지 확인하려면 여기를 try/finally 사용할 수 있습니다 데이터베이스 어댑터에 대한 매개 변수 자리 표시 자 구문을 조정해야합니다. sqlite3?이고, MySQLdb는 %s이고, psycopg2입니다.

+0

내가 코딩하고있는 db는 postgres입니다. 그래서이 문장을 사용하라고 들었습니다. – Shifty

+1

@Shifty : DB-API2 스펙을 준수하는 모든 Python 데이터베이스 어댑터 (사용하는 모든 것)는 SQL 매개 변수를 지원합니다. 'psycopg2'는 PostgreSQL에 사용되는 가장 일반적인 어댑터이며'% s' 구문을 사용하여 [SQL 매개 변수 지원] (http://initd.org/psycopg/docs/usage.html#query-parameters)을 지원합니다. –

+0

@ Shifty : 누구나이 문장을 사용하라고 말한 사람은 데이터베이스 매개 변수에 대해 아직 알지 못합니다. SQL 매개 변수를 사용하지 않는 것이 좋습니다. –