1

你能做这样的事吗?我有以下但 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
4

1 回答 1

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 -- Python 代码样式指南,以获取有关最大行长和变量命名以及其他编码约定的指导。

于 2013-05-07T21:40:53.110 回答