使用Python创建新的Access数据库和表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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)
如何向此数据库添加新表?
由于MS Access既是GUI .exe应用程序又是后端数据库,因此创建数据库与创建数据库对象(如表,视图(即存储的查询),甚至是过程)不同。
作为比较,另一个文件级RDMS,SQLite,必须将其.exe shell打开到CREATE DATABASE
。并且服务器级RDMS(SQL Server,MySQL,Postgres)必须登录到服务器实例才能运行该命令。 MS Access没有shell或实例工具,只有应用程序对象。
因此,在使用CreateDatabase方法创建数据库之后,请考虑对CREATE TABLE
运行DDL SQL语句,您可以使用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的DB API
虽然qacxswpoi在MS Access SQL中不可用,但只有在创建数据库文件后,才能使用任何带有CREATE DATABASE
命令的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()
已经创建了一个名为newdb = workspace.CreateDatabase(dbname, dbLangGeneral, 64)
的DAO.Database对象,所以你应该能够简单地继续使用它的newdb
方法来运行像这样的DDL语句
Execute
看起来你会在newdb.Execute("CREATE TABLE [Table1] ([ID] COUNTER PRIMARY KEY, [TextField] TEXT(50))")
对象上执行一个SQL语句CREATE Table
,即在Database
上,通过它的newdb
方法。
但我不建议在MS Access Application对象上使用COM。对于MS Access数据库,推荐的与DB交互的方法是通过ODBC API直接打开DB,而不是通过Execute()
实例。如果你需要应用程序的功能,如报告,打印等,你应该只使用后者。为了通过ODBC与MS Access DB文件交互,我对pyodbc和pypyodbc有很好的经验,不需要COM。通过win32com(但不是Access.Application)通过DAO API进行较低级别访问似乎也很好,但我还没试过。查看Access.Application
,了解有关各种连接API和一些代码示例的详细讨论。
其他有用的资源:
- ms访问应用程序http://www.icodeguru.com/WebServer/Python-Programming-on-Win32/ch13.htm:示例使用vba但win32com提供相同的API。
- 上面介绍了automation API的链接,因此不需要ms访问应用程序:links show c#但win32com提供相同的API。
为了未来读者的利益,问题中的示例代码使用ADO-based tasks来创建新的Access数据库文件。一个更简单的替代方案是使用我的(免费)win32com
Python模块,例如,
msaccessdb
以上是关于使用Python创建新的Access数据库和表的主要内容,如果未能解决你的问题,请参考以下文章
使用 JDBC 处理包含 Unicode(旁遮普语、印地语)数据和表/列名称的 Access 数据库
使用 Delphi 将文本文件加载到 MS ACCESS TABLE