我正在尝试用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)
如何向此数据库添加新表?
答案 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和一些代码示例的详细讨论。
其他有用的资源:
答案 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)