使用 Python 创建新的 Access 数据库和表

Create new Access database and tables using Python

我正在尝试在 Python 中创建一个 Access 数据库并向其中添加两个新表。我正在使用 win32com 并设法创建了数据库,但无法创建表。我得到的只是无用的 Windows 错误。谁能帮帮我?

以下代码工作正常:

dbname = r'C:/Users/Guest/Desktop/NewDB.mdb'
db = Dispatch("Access.Application")
dbEngine = db.DBEngine
workspace = dbEngine.Workspaces(0)

dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'
newdb = workspace.CreateDatabase(dbname, dbLangGeneral, 64)

如何向该数据库添加新表?

看起来您将通过其 Execute() 方法在 Database 对象(即 newdb 上执行 SQL 语句 CREATE Table

但我不建议在 MS Access Application 对象上使用 COM。 对于 MS Access 数据库,与 DB 交互的推荐方法是直接通过 ODBC API 打开 DB,而不是通过 Access.Application 实例。如果您需要应用程序的功能,如报告、打印等,您应该只使用后者。为了通过 ODBC 与 MS Access DB 文件交互,我对不需要 COM 的 pyodbc 和 pypyodbc 有很好的体验。通过 DAO API 通过 win32com(但不是 Access.Application)的较低级别访问似乎也很不错,但我没有尝试过。查看 http://www.icodeguru.com/WebServer/Python-Programming-on-Win32/ch13.htm 以获得有关各种可用连接 API 和一些代码示例的良好讨论。

其他有用的资源:

  • ms 访问应用程序automation API:示例使用vba,但win32com 提供相同的API。
  • 上面的介绍以及 ADO-based tasks 的链接因此不需要 ms 访问应用程序:链接显示 c# 但 win32com 提供相同的 API.
newdb = workspace.CreateDatabase(dbname, dbLangGeneral, 64)

已经创建了一个名为 newdb 的 DAO.Database 对象,因此您应该能够简单地继续使用它的 Execute 方法来 运行 DDL 语句,例如这个

newdb.Execute("CREATE TABLE [Table1] ([ID] COUNTER PRIMARY KEY, [TextField] TEXT(50))")

因为 MS Access 既是 GUI .exe 应用程序又是后端数据库,因此创建数据库与创建 Tables 等数据库对象的过程不同Views(即存储的查询),甚至 Procedures

作为对比,另一个文件级 RDMS SQLite,必须打开它的 .exe shell 到 CREATE DATABASE。而服务器级别的 RDMS(SQL Server,MySQL,Postgres)必须登录到服务器实例才能执行 运行 命令。 MS Access 没有 shell 或实例工具,只有一个应用程序对象。

因此,用CreateDatabase method, consider running a DDL SQL statement to CREATE TABLE which you can do with the Execute()方法创建数据库后。

Python COM 接口

from win32com.client import Dispatch

try:
    dbname = r'C:/Users/Guest/Desktop/NewDB.mdb'
    accApp = Dispatch("Access.Application")
    dbEngine = accApp.DBEngine
    workspace = dbEngine.Workspaces(0)

    dbLangGeneral = ';LANGID=0x0409;CP=1252;COUNTRY=0'
    newdb = workspace.CreateDatabase(dbname, dbLangGeneral, 64)

    newdb.Execute("""CREATE TABLE Table1 (
                      ID autoincrement,
                      Col1 varchar(50),
                      Col2 double,
                      Col3 datetime);""")

except Exception as e:
    print(e)

finally:
    accApp.DoCmd.CloseDatabase
    accApp.Quit
    newdb = None
    workspace = None
    dbEngine = None
    accApp = None

Python数据库API

虽然 CREATE DATABASE 在 MS Access SQL 中不可用,但您可以 运行 使用任何 Python ODBC API 以上 Execute仅在创建数据库文件后使用 CREATE TABLE 命令:

import pypyodbc

dbname = r'C:/Users/Guest/Desktop/NewDB.mdb'     
constr = "DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};DBQ={0};".format(dbname)

dbconn = pypyodbc.connect(constr)

cur = dbconn.cursor()
cur.execute("""CREATE TABLE Table1 (
                 ID autoincrement,
                 Col1 varchar(50),
                 Col2 double,
                 Col3 datetime);""")
dbconn.commit()

为了未来读者的利益,问题中的示例代码使用 win32com 创建新的 Access 数据库文件。一个更简单的替代方法是使用我的(免费)msaccessdb Python 模块,例如,

import msaccessdb
import pyodbc

db_file = r'C:\path\to\new.accdb'
msaccessdb.create(db_file)
cnxn_str = (
    'DRIVER={{Microsoft Access Driver (*.mdb, *.accdb)}};'
    'DBQ={}'.format(db_file)
)
cnxn = pyodbc.connect(cnxn_str)