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

WRJ*_*WRJ 4 ms-access win32com python-3.x

我正在尝试在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)
Run Code Online (Sandbox Code Playgroud)

如何将新表添加到该数据库?

Par*_*ait 5

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

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

因此,在使用CreateDatabase方法创建数据库之后,请考虑运行CREATE TABLE您可以使用Execute()方法执行的DDL SQL语句。

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
Run Code Online (Sandbox Code Playgroud)

Python DB API

虽然CREATE DATABASEMS Access SQL中没有,但只有在创建数据库文件后,才可以Execute使用任何Python ODBC API通过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()
Run Code Online (Sandbox Code Playgroud)