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

新手上路,请多包涵

我正在尝试在 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)

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

原文由 WRJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

由于 MS Access 既是 GUI .exe 应用程序又是后端数据库,因此创建数据库与创建数据库对象(如 _表_、 _视图_(即存储的查询)甚至 _过程)是不同的过程_。

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

因此,在使用 CreateDatabase 方法创建数据库后,考虑运行 DDL SQL 语句到 CREATE TABLE 您可以使用 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 中不可用,但您可以运行上面的 Execute 使用任何带有 CREATE TABLE 的 Python ODBC API 仅在创建数据库文件后运行:

 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()

原文由 Parfait 发布,翻译遵循 CC BY-SA 3.0 许可协议

为了未来读者的利益,问题中的示例代码使用 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)

原文由 Gord Thompson 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进