如何通过Python 3.5.1创建永久的MS Access Query?

kn9*_*9ka 3 python ms-access vba pyodbc

我有大约40个MS Access数据库,如果需要从一个db创建或传输MS Access Query(如对象)之一到其他dbs,则会遇到一些麻烦.所以我尝试解决这个问题,pyodbc但是..因为我看到pyodbc不支持创建新的,永久的MS Access Query(对象).我可以连接到db,创建或删除表/行但不能创建和保存新查询.

import pyodbc

odbc_driver = r"{Microsoft Access Driver (*.mdb, *.accdb)}"

db_test1 = r'''..\Test #1.accdb'''
db_test2 = r'''..\Test #2.accdb'''
db_test3 = r'''..\Test #3.accdb'''
db_test4 = r'''..\Test #4.accdb'''

db_test_objects = [db_test1, db_test2, db_test3, db_test4]

odbc_conn_str = "Driver=%s;DBQ=%s;" % (odbc_driver, db_file)
print (odbc_conn_str)

conn = pyodbc.connect(odbc_conn_str)
odbc_cursor = conn.cursor()

NewQuery = "CREATE TABLE TestTable(symbol varchar(15), leverage double)"

odbc_cursor.execute(NewQuery)
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)

那么,如何从python中创建和保存MS Access Query 对象?我尝试在Google中搜索信息,但答案与运行SQL代码有关.

在VBA上,此代码如下所示:

Public Sub CreateQueryDefX()

   Dim base(1 To 4) As String
   base(1) = "..\Test #1.accdb"
   base(2) = "..\Test #2.accdb"
   base(3) = "..\Test #3.accdb"
   base(4) = "..\Test #4.accdb"

   For i = LBound(base) To UBound(base)
    CurrentBase = base(i)
    Set dbo = OpenDatabase(CurrentBase)
        With dbo
        Set QueryNew = .CreateQueryDef("TestQuery", _
         "SELECT * FROM TestTable")
         RefreshDatabaseWindow
        .Close
        End With
   Next i

RefreshDatabaseWindow

End Sub
Run Code Online (Sandbox Code Playgroud)

抱歉我的英文,这不是我的母语:)

顺便说一句,我知道如何通过VBA解决这个问题,但我有兴趣通过python解决这个问题.

谢谢.

Gor*_*son 5

您可以使用CREATE VIEW语句在Access中创建已保存的Select Query.相当于你的VBA示例的pyodbc将是

crsr = conn.cursor()
sql = """\
CREATE VIEW TestQuery AS
SELECT * FROM TestTable
"""
crsr.execute(sql)
Run Code Online (Sandbox Code Playgroud)

要删除保存的查询,您只需执行DROP VIEW语句即可.

有关Access中DDL的更多信息,请参阅

数据定义语言