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

标签 python vba ms-access pyodbc

我有大约 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/

相关文章:

python - 让角色在按住按键的同时继续移动

vba - 对于范围内的每个单元格,如果单元格为负数,则更改颜色

powershell - 授予 MSysObjects 的读取权限

database - 数据库更新时如何刷新表单?

python - 对我自己的谷歌日历的永久编程访问

python - 在 Python 跟踪中查找完整路径名

string - 显示 2 行消息弹出 vba 6

excel - 使用 VBA 代码将 Excel 表转换为 Json 格式会导致时间列发生不必要的格式更改

ms-access - 如何在 Access VBA 中设置对正在运行的对象的引用

python - 为什么使用 Selenium 时网站会阻止浏览器导航?