如何使用 Python 将访问权限 table 导入另一个访问权限 table
How to import access table to another access table using Python
早上好。
我是 Python 的新手,目前正在实习。他们要我制作的脚本的一部分是将 table 从 Access 数据库 1 导入到 Access 数据库 2。
我试图用以下两个库做一些事情:pyodbc 和 prettytable。我想用数据库 1 中的 prettytable 创建一个临时 table 并从中获取值并将其放入数据库 2。我希望我可以在 [=27 中放置一个变量=].但很明显,那永远行不通。所以我现在被困住了。
有人有想法吗?
您可以在下面阅读我使用的漂亮代码:
import pyodbc
DBfile = 'C:/Users/stage1/Documents/test.accdb'
conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/stage1/Documents/test.accdb;")
cursor = conn.cursor()
DBfile = 'C:/Users/stage1/Documents/test.accdb'
conn2 = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/stage1/Documents/test.accdb;")
cursor2 = conn2.cursor()
SQL = """select naam
FROM naam;"""
for row in cursor.execute(SQL):
k = row.naam
print k
cursor2.execute("""insert into testtable(naam) values (?)""", (k))
conn2.commit()
cursor.close()
conn.close()
cursor2.close()
conn2.close()
问题已解决。感谢 mhawke
不评论你在做什么和为什么。我不理解漂亮的 table 东西,但你需要将 k
的值传递给执行语句。变化:
cursor.execute("""insert into Tableimport(name) values (k)""")
到
cursor.execute("""insert into Tableimport(name) values (?)""", (k,))
后者是参数化查询,其中 ?
占位符将替换为 k
的 值 。
评论来回太多,问题提供的信息不够清楚。因此,您可以尝试使用以下代码,在尝试任何查询之前检查所需的 table 和列是否存在。如果有任何不符合预期的情况,它将显示 tables and/or 列的列表。这旨在帮助诊断问题,它不是生产代码。\
import pyodbc
DBfile = 'C:/Users/stage1/Documents/test.accdb'
conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/stage1/Documents/test.accdb;")
cursor = conn.cursor()
source_table = 'naam'
dest_table = 'testtable'
column_name = 'naam'
if (cursor.columns(table=source_table, column=column_name).fetchone() and
cursor.columns(table=dest_table, column=column_name).fetchone()):
result = cursor.execute("SELECT naam FROM naam")
for row in result:
k = row.naam
print 'Got k: {!r}'.format(k)
cursor.execute("insert into testtable (naam) values (?)", (k,))
conn.commit()
else:
# tables and/or columns missing
show_tables = show_source_columns = show_dest_columns = False
if not cursor.tables(table=source_table).fetchone():
print 'No source table named "{}"'.format(source_table)
show_tables = True
elif not cursor.columns(table=source_table, column=column_name).fetchone():
show_source_columns = True
if not cursor.tables(table=dest_table).fetchone():
print 'No destination table named "{}"'.format(source_table)
show_tables = True
elif not cursor.columns(table=dest_table, column=column_name).fetchone():
show_dest_columns = True
if show_tables:
print '\n\nAvailable tables are:'
for row in cursor.tables():
print row
if show_source_columns:
print '\n\nSource table "{}" missing column "{}". Available columns:'.format(source_table, column_name)
for row in cursor.columns(table=source_table):
print '{} : {}'.format(row.column_name, row.data_type)
if show_dest_columns:
print '\n\nDestination "{}" table missing column "{}". Available columns:'.format(dest_table, column_name)
for row in cursor.columns(table=dest_table):
print '{} : {}'.format(row.column_name, row.data_type)
cursor.close()
conn.close()
早上好。
我是 Python 的新手,目前正在实习。他们要我制作的脚本的一部分是将 table 从 Access 数据库 1 导入到 Access 数据库 2。
我试图用以下两个库做一些事情:pyodbc 和 prettytable。我想用数据库 1 中的 prettytable 创建一个临时 table 并从中获取值并将其放入数据库 2。我希望我可以在 [=27 中放置一个变量=].但很明显,那永远行不通。所以我现在被困住了。
有人有想法吗?
您可以在下面阅读我使用的漂亮代码:
import pyodbc
DBfile = 'C:/Users/stage1/Documents/test.accdb'
conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/stage1/Documents/test.accdb;")
cursor = conn.cursor()
DBfile = 'C:/Users/stage1/Documents/test.accdb'
conn2 = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/stage1/Documents/test.accdb;")
cursor2 = conn2.cursor()
SQL = """select naam
FROM naam;"""
for row in cursor.execute(SQL):
k = row.naam
print k
cursor2.execute("""insert into testtable(naam) values (?)""", (k))
conn2.commit()
cursor.close()
conn.close()
cursor2.close()
conn2.close()
问题已解决。感谢 mhawke
不评论你在做什么和为什么。我不理解漂亮的 table 东西,但你需要将 k
的值传递给执行语句。变化:
cursor.execute("""insert into Tableimport(name) values (k)""")
到
cursor.execute("""insert into Tableimport(name) values (?)""", (k,))
后者是参数化查询,其中 ?
占位符将替换为 k
的 值 。
评论来回太多,问题提供的信息不够清楚。因此,您可以尝试使用以下代码,在尝试任何查询之前检查所需的 table 和列是否存在。如果有任何不符合预期的情况,它将显示 tables and/or 列的列表。这旨在帮助诊断问题,它不是生产代码。\
import pyodbc
DBfile = 'C:/Users/stage1/Documents/test.accdb'
conn = pyodbc.connect("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=C:/Users/stage1/Documents/test.accdb;")
cursor = conn.cursor()
source_table = 'naam'
dest_table = 'testtable'
column_name = 'naam'
if (cursor.columns(table=source_table, column=column_name).fetchone() and
cursor.columns(table=dest_table, column=column_name).fetchone()):
result = cursor.execute("SELECT naam FROM naam")
for row in result:
k = row.naam
print 'Got k: {!r}'.format(k)
cursor.execute("insert into testtable (naam) values (?)", (k,))
conn.commit()
else:
# tables and/or columns missing
show_tables = show_source_columns = show_dest_columns = False
if not cursor.tables(table=source_table).fetchone():
print 'No source table named "{}"'.format(source_table)
show_tables = True
elif not cursor.columns(table=source_table, column=column_name).fetchone():
show_source_columns = True
if not cursor.tables(table=dest_table).fetchone():
print 'No destination table named "{}"'.format(source_table)
show_tables = True
elif not cursor.columns(table=dest_table, column=column_name).fetchone():
show_dest_columns = True
if show_tables:
print '\n\nAvailable tables are:'
for row in cursor.tables():
print row
if show_source_columns:
print '\n\nSource table "{}" missing column "{}". Available columns:'.format(source_table, column_name)
for row in cursor.columns(table=source_table):
print '{} : {}'.format(row.column_name, row.data_type)
if show_dest_columns:
print '\n\nDestination "{}" table missing column "{}". Available columns:'.format(dest_table, column_name)
for row in cursor.columns(table=dest_table):
print '{} : {}'.format(row.column_name, row.data_type)
cursor.close()
conn.close()