在循环中生成pyodbc SQL语法

时间:2013-05-07 21:16:19

标签: ms-access pyodbc

你能做这样的事吗?我有以下,但cursor.execute不喜欢selectSQL的语法。最终,我希望遍历.accdb中的所有表,并将每个表中的记录插入另一个具有相同表和字段的.accdb中。原因是,将TabletPC上的现场数据收集的新记录带到服务器上的主数据库。

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 个答案:

答案 0 :(得分:1)

使用str.format()来简化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 {}'.format(t.table_name)
        cursor.execute(selectSQL)
        row = cursor.fetchone()
        if row:
            print t.table_name
            print row

除此之外,请查看PEP 8 -- Style Guide for Python Code以获取有关最大行长度和变量命名的指导,以及其他编码约定。