не может увидеть таблицу, созданную pyodbc в MS Access - PullRequest
0 голосов
/ 06 июня 2018

Я обращаюсь к базе данных MS Access в Python 3.6, используя библиотеку pyodbc.Я могу читать таблицу, без проблем.Я создал простую таблицу (Сотрудник).Я вставил записи.Мне тоже удалось получить записи, прочитав таблицу, без проблем.

Я также перечислил таблицы в БД MS Access.В списке отображается таблица сотрудников.

Но когда я открываю базу данных 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()

Ответы [ 2 ]

0 голосов
/ 29 августа 2019

Дополнительным решением для фиксации вручную является установка autocommit = True при создании экземпляра соединения.

Например:

conn = pyodbc.connect(odbc_conn_str, autocommit = True)
0 голосов
/ 06 июня 2018

Это общая объектная модель Python, в которой вам нужно вызывать реальную функцию, а не ее ограниченное имя.В частности, ваши строки фиксации неверны там, где

conn.commit

Должно быть с открывающими / закрывающими скобками:

conn.commit()

Другой способ увидеть разницу - это просмотреть тип объекта:

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

type(conn.commit())
# NoneType

Я воспроизвел вашу проблему с точным кодом, и добавление скобок решило проблему.

...