使用 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()
您似乎必须完整地创建查询,然后将您的数据以元组格式输入
我有一个不断增长和变化的数据库,反映了国家和环保署通过的许可。 随着数据库的变化和更新,我需要传输相关信息。
脚本做了两件事;首先,它检查哪些字段相同,并创建一个字段和数据列表,这些字段和数据将被插入到新数据库中。其次将数据插入到新数据库中。
问题是我无法插入它。我已经以各种方式匹配了网上所说的所有内容,但出现错误('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()
您似乎必须完整地创建查询,然后将您的数据以元组格式输入