在 ms 访问中看不到由 pyodbc 创建的表

Posted

技术标签:

【中文标题】在 ms 访问中看不到由 pyodbc 创建的表【英文标题】:can't see table created by pyodbc in ms access 【发布时间】:2018-06-06 04:52:41 【问题描述】:

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

【问题讨论】:

尝试在 Access 中执行“压缩和修复数据库”操作,然后查看新表是否出现。 【参考方案1】:

这是一个通用的 Python 对象模型,您需要在其中调用实际函数而不是其有界名称。具体来说,您的提交行在哪里不正确

conn.commit

应该带有开/关括号:

conn.commit()

查看差异的另一种方法是查看对象的类型:

type(conn.commit)
# <built-in method commit of pyodbc.Connection object at 0x000000000B772E40>

type(conn.commit())
# NoneType

我确实使用确切的代码重现了您的问题,并且添加括号解决了该问题。

【讨论】:

太棒了!很高兴能提供帮助,请不要忘记 *** 版本的 thanks。【参考方案2】:

手动提交的另一个解决方案是在创建连接实例时设置autocommit = True

例如:

conn = pyodbc.connect(odbc_conn_str, autocommit = True)

【讨论】:

以上是关于在 ms 访问中看不到由 pyodbc 创建的表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyodbc 将表从 MS Access 迁移到 Postgres?

使用 pyodbc 连接到链接访问数据库

在 Spyder 中看不到由 PySide2 创建的应用程序窗口

通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现“登录超时”错误

使用 pyodbc 将带日期的数据上传到 MS Access 数据库

Windows 上的 pyodbc 和 python 3.4