2013-05-07 1 views
1

그런 일을 할 수 있습니까? 나는 다음과 같은 있지만 cursor.execute selectSQL 구문을 좋아하지 않습니다. 궁극적으로 나는 .accdb의 모든 테이블을 반복하고 각 테이블의 레코드를 동일한 테이블과 필드를 가진 다른 .accdb에 삽입하려고합니다. 이유는 TabletPCs의 필드 데이터 수집에서 서버의 마스터 데이터베이스로 새로운 레코드를 가져 오는 것입니다.루프 내에서 pyodbc SQL 구문 생성

import pyodbc 

connOtherDB = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='path to my dbase;") 
otherDBtbls = connOtherDB.cursor().tables() 
for t in otherDBtbls: 
    if t.table_name.startswith("tbl"): #ignores MS sys tables 
     cursor = connOtherDB.cursor() 
     #selectSQL = '"SELECT * from '+ str(t.table_name) + '"' 
     cursor.execute("SELECT * from tblDatabaseComments") #this works if I refer to a table by name 
     cursor.execute(selectSQL) #this does not work. throws SQL syntax error 
     row = cursor.fetchone() 
     if row: 
      print t.table_name 
      print row 

답변

1

사용 str.format() SQL 문 건물 완화하려면 다음 다른 코딩 규칙 중 최대 라인 길이와 변수 명명에 대한 지침에 대한 PEP 8 -- Style Guide for Python Code 봐 걸릴 제쳐두고

import pyodbc 

connOtherDB = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='path to my dbase;") 
otherDBtbls = connOtherDB.cursor().tables() 
for t in otherDBtbls: 
    if t.table_name.startswith("tbl"): #ignores MS sys tables 
     cursor = connOtherDB.cursor() 
     selectSQL = 'SELECT * FROM {}'.format(t.table_name) 
     cursor.execute(selectSQL) 
     row = cursor.fetchone() 
     if row: 
      print t.table_name 
      print row 

합니다.

+0

감사합니다. 매력처럼 일했습니다. 나는 스타일이 나를 멀리주지 않으면 파이썬 초보자이다 ;-). 스타일 가이드 링크를 감상하십시오. 나는 그것을 살펴보고 개선하려고 노력할 것이다. 내가 가져온 인트로 과정은 lowerCamelCase를 사용하라고 말했지만, 올바르게 구현하지는 못했을 것입니다. – dgj32784

+0

@ dgj32784 도움이 된 것을 기쁘게 생각합니다. 대답이 유용하고 문제가 해결되면 upvote하고 받아들이는 것을 잊지 마십시오. – Bryan