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

时间:2016-10-12 10:01:01

标签: python-3.x ms-access win32com

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

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

4 个答案:

答案 0 :(得分:5)

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

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

因此,在使用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命令的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()

答案 1 :(得分:1)

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

但我不建议在MS Access Application 对象上使用COM。 对于MS Access数据库,与DB交互的推荐方法是通过ODBC API直接打开DB,而不是通过Access.Application实例。如果你需要应用程序的功能,如报告,打印等,你应该只使用后者。为了通过ODBC与MS Access DB文件交互,我对pyodbc和pypyodbc有很好的经验,不需要COM。通过win32com(但不是Access.Application)通过DAO API进行较低级别访问似乎也很好,但我还没试过。查看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。

答案 2 :(得分:1)

newdb

已经创建了一个名为Execute的DAO.Database对象,因此您应该能够继续使用其newdb.Execute("CREATE TABLE [Table1] ([ID] COUNTER PRIMARY KEY, [TextField] TEXT(50))") 方法来运行这样的DDL语句

while($info = mysqli_fetch_assoc($infos_set)) {
                    $output = htmlentities($info["content"]); 
                    $output .= " <br><br>";

答案 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)