将多个 DBF 文件中的所有数据插入到多个表中
Inserting All Data from Multiple DBF files into Multiple Tables
我正在努力将 DBF 文件中的数据从 UNC 推送到 sql 服务器数据库。大约有 50 个 DBF 文件,所有这些文件都具有不同的模式。现在我知道我可以创建一个程序并列出所有 50 个表和所有 50 个 DBF 文件,但这将永远花费。有没有办法以某种方式导出 DBF 字段名称以进行插入,而不是遍历每个 DBF 并键入 DBF 中的每个字段名称?这是我现在拥有的代码,可从一个 DBF 文件中的两个字段插入记录。
import pyodbc
from dbfread import DBF
# SQL Server Connection Test
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=**********;DATABASE=TEST_DBFIMPORT;UID=test;PWD=test')
cursor = cnxn.cursor()
dir = 'E\Backups\'
table = DBF('E:\Backups\test.dbf', lowernames=True)
for record in table.records:
rec1 = record['field1']
rec2 = record['field2']
cursor.execute ("insert into tblTest (column1,column2) values(?,?)", rec1, rec2)
cnxn.commit()
一些有用的提示使用我的 dbf package:
import dbf
import os
for filename in os.listdir('e:/backups'):
with dbf.Table('e:/backups/'+filename) as table:
fields = dbf.field_names(table)
for record in table:
values = list(record)
# insert fields, values using odbc
如果要传输所有字段,则需要计算 table 名称、字段名称和值;一些例子:
sql_table = os.path.splitext(filename)[0]
fields = ','.join(fields)
place_holders = ','.join(['?'] * len(fields))
values = tuple(record)
sql = "insert into %s (%s) values(%s)" % (sql_table, fields, place_holders)
curser.execute(sql, *values)
我正在努力将 DBF 文件中的数据从 UNC 推送到 sql 服务器数据库。大约有 50 个 DBF 文件,所有这些文件都具有不同的模式。现在我知道我可以创建一个程序并列出所有 50 个表和所有 50 个 DBF 文件,但这将永远花费。有没有办法以某种方式导出 DBF 字段名称以进行插入,而不是遍历每个 DBF 并键入 DBF 中的每个字段名称?这是我现在拥有的代码,可从一个 DBF 文件中的两个字段插入记录。
import pyodbc
from dbfread import DBF
# SQL Server Connection Test
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=**********;DATABASE=TEST_DBFIMPORT;UID=test;PWD=test')
cursor = cnxn.cursor()
dir = 'E\Backups\'
table = DBF('E:\Backups\test.dbf', lowernames=True)
for record in table.records:
rec1 = record['field1']
rec2 = record['field2']
cursor.execute ("insert into tblTest (column1,column2) values(?,?)", rec1, rec2)
cnxn.commit()
一些有用的提示使用我的 dbf package:
import dbf
import os
for filename in os.listdir('e:/backups'):
with dbf.Table('e:/backups/'+filename) as table:
fields = dbf.field_names(table)
for record in table:
values = list(record)
# insert fields, values using odbc
如果要传输所有字段,则需要计算 table 名称、字段名称和值;一些例子:
sql_table = os.path.splitext(filename)[0]
fields = ','.join(fields)
place_holders = ','.join(['?'] * len(fields))
values = tuple(record)
sql = "insert into %s (%s) values(%s)" % (sql_table, fields, place_holders)
curser.execute(sql, *values)