我有大约 40 个 MS Access 数据库,如果需要创建或将一个 MS Access 查询(如对象)从一个数据库传输到其他数据库,我会遇到一些麻烦。
所以我尝试用 pyodbc
解决这个问题,但是……正如我所见,pyodbc
不支持创建新的、永久的 MS Access 查询(对象)。
我可以连接到数据库、创建或删除表/行,但无法创建和保存新查询。
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()
那么,如何从 python 创建和保存 MS Access 查询 like objects? 我尝试在 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
对不起我的英语,这不是我的母语:)
顺便说一下,我知道如何用 VBA 解决这个问题,但我有兴趣用 python 解决这个问题。
谢谢。
最佳答案
您可以使用 CREATE VIEW语句在 Access 中创建保存的选择查询。相当于您的 VBA 示例的 pyodbc 是
crsr = conn.cursor()
sql = """\
CREATE VIEW TestQuery AS
SELECT * FROM TestTable
"""
crsr.execute(sql)
要删除保存的查询,您可以简单地执行 DROP VIEW声明。
有关 Access 中 DDL 的详细信息,请参阅
关于python - 如何通过 Python 3.5.1 创建永久性 MS Access 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661582/