gpt4 book ai didi

python - 如何通过 Python 3.5.1 创建永久性 MS Access 查询?

转载 作者:太空宇宙 更新时间:2023-11-03 13:35:59 25 4
gpt4 key购买 nike

我有大约 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 的详细信息,请参阅

Data Definition Language

关于python - 如何通过 Python 3.5.1 创建永久性 MS Access 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39661582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com