我使用pyodbc库访问Python 3.6中的MS Access数据库。我可以看一张桌子,没问题。我创建了一个简单的表(Employee)。我插入了记录。通过阅读表格,我也能够获取记录,没有任何问题。
我还列出了MS Access DB中的表。员工表显示在列表中。
但是当我打开MS Access数据库时,我找不到该表。我更改了MS Access DB以显示隐藏和系统对象。员工表格不会显示。
我做错了什么?
由于
以下是代码:
import pyodbc
db_file = r'''C:\TickData2018\StooqDataAnalysis.accdb'''
user = 'admin'
password = ''
odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.accdb)};DBQ=%s;UID=%s;PWD=%s' %\
(db_file, user, password)
# Or, for newer versions of the Access drivers:
odbc_conn_str = 'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=%s;UID=%s;PWD=%s' %\
(db_file, user, password)
conn = pyodbc.connect(odbc_conn_str)
print("connection made")
c = conn.cursor()
c.execute("SELECT * FROM 5MtsBaseForAnalysisSorted")
list1 = c.fetchmany(2)
print(list1[0][0])
print(list1[0][1])
print(list1[0][2])
try:
c.execute("""CREATE TABLE employee(
first text,
last text,
pay integer
);""")
except Exception as e:
print(e)
conn.commit
c.execute("INSERT INTO employee VALUES ('Krishna', 'Sundar', 50000)")
c.execute("INSERT INTO employee VALUES ('Divya', 'Sundar', 70000)")
c.execute("INSERT INTO employee VALUES ('Panka', 'Sundar', 70000)")
conn.commit
c.execute("SELECT * FROM employee")
print(c.fetchall())
c.tables()
rows = c.fetchall()
for row in rows:
print(row)
c.close()
del c
conn.close()
答案 0 :(得分:1)
这是一个通用的Python对象模型,您需要调用实际函数而不是其有界名称。具体来说,你的提交行不正确
conn.commit
应该是开/闭括号:
conn.commit()
另一种看待差异的方法是查看对象的类型:
type(conn.commit)
# <built-in method commit of pyodbc.Connection object at 0x000000000B772E40>
type(conn.commit())
# NoneType
我确实使用确切的代码重现了您的问题,添加括号解决了问题。
答案 1 :(得分:0)
手动提交的另一种解决方案是在创建连接实例时设置autocommit = True
。
例如:
conn = pyodbc.connect(odbc_conn_str, autocommit = True)