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