早上好。
我是Python的新手,我现在正在实习。他们要我做的脚本的一部分是将Access数据库1中的表导入Access数据库2。
我试图用以下两个库来做一些事情:pyodbc和prettytable。我想从数据库1创建一个具有prettytable的临时表,并从中获取值并将其放入数据库2.我希望我可以在SQL中放置一个变量。但显而易见的是,这永远不会奏所以我现在卡住了。
有人有想法吗?
你可以阅读我在下面使用的漂亮代码:
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
答案 0 :(得分:1)
不评论你在做什么以及为什么。我没有理解漂亮的表格,但你需要将k
的值传递给execute语句。变化:
cursor.execute("""insert into Tableimport(name) values (k)""")
到
cursor.execute("""insert into Tableimport(name) values (?)""", (k,))
后者是参数化查询,其中?
占位符将替换为k
的值。
评论过多来回,问题中提供的信息不够清晰。因此,您可以尝试以下代码,在尝试任何查询之前检查所需的表和列是否存在。如果任何内容不符合预期,它将显示表和/或列的列表。这是为了帮助诊断问题,它不是生产代码。\
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()