使用 Python 在 MS Access 中传输数据

Transfering Data in MS Access Using Python

我有一个不断增长和变化的数据库,反映了国家和环保署通过的许可。 随着数据库的变化和更新,我需要传输相关信息。

脚本做了两件事;首先,它检查哪些字段相同,并创建一个字段和数据列表,这些字段和数据将被插入到新数据库中。其次将数据插入到新数据库中。

问题是我无法插入它。我已经以各种方式匹配了网上所说的所有内容,但出现错误('42000','[42000] [Microsoft] [ODBC Microsoft Access Driver] INSERT INTO 语句中的语法错误。(-3502)(SQLExecDirectW)')。

我不知道如何预防它。

代码:

import pyodbc

importDatabase = r"J:\ENVIRO FIELD\AccessDatabases\MS4\MS4 Town Databases\~Template\MS4_Apocalypse Import DEV 1.accdb"

"Create the Import Database Connection"
connectionImport = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;' %(importDatabase))
cursorImport = connectionImport.cursor()


"####---Outfall Section---####"

"Import the outfall names into the new database"

tbl = "tbl_Outfall_1_Profile"

exportList = []
importList = []
for row in cursorImport.columns(table = "tblExportMigration_Outfall_1_Profile"):
    field = row.column_name
    exportList.append(field)

for row in cursorImport.columns(table = "tbl_Outfall_1_Profile"):
    field = row.column_name
    importList.append(field)

matchingList = []
for field in exportList:
    if field != "outfallID":
        if field in importList:
            matchingList.append(field)
    else:
        continue

sqlValue = ""
for field in matchingList:
    sqlValue += "[%s], " %(field)

sqlValue = sqlValue[:-2]
sql = "SELECT %s from %s" %(sqlValue, "tblExportMigration_Outfall_1_Profile")

for rowA in cursorImport.execute(sql):
    tupleList = list(rowA)
    tupleList = ["" if i == None else i for i in tupleList]
    tupleValues = tuple(tupleList)
    sqlUpdate = """INSERT INTO tbl_Outfall_1_Profile (%s) Values %s;""" %(sqlValue, tupleValues)
    cursorImport.execute(sqlUpdate)

cursorImport.close()

这是我创建的 sql 字符串

"插入 tbl_Outfall_1_Profile ([profile_OutfallName], [profile_HistoricalName1], [profile_HistoricalName2], [profile_HistoricalName3], [profile_HistoricalName4]) 值 ('756', '', '', '', '');"

This is the sql string [I think] I create

试试这个:

sqlUpdate = """INSERT INTO tbl_Outfall_1_Profile (%s) Values (%s);""" %(sqlValue, tupleValues)

或者也许:

sqlUpdate = "INSERT INTO tbl_Outfall_1_Profile (%s) Values (%s);" %(sqlValue, tupleValues)

根据@Gord Thompson 所说,我实际上能够创建动态参数流

先创建一个模块来创建?

def Defining_Paramters(length):
    parameterString = ""
for x in range(1,length):
    parameterString += "?, "
parameterString += "?"

return parameterString

然后将其插入 sql 更新的字符串中

sqlUpdate = sqlUpdate = "INSERT INTO %s (%s) Values (%s);" %(table, sqlFrameworkSubStr, parameters)

运行 游标并提交它

cursorTo.execute(sqlUpdate, (dataTuple))
connectionTo.commit()

您似乎必须完整地创建查询,然后将您的数据以元组格式输入