如何使用Python将访问表导入另一个访问表

时间:2015-03-19 14:03:28

标签: python ms-access-2007 pyodbc

早上好。

我是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

1 个答案:

答案 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()