Почему с оператором работает с sqlite3, а не с mysql .connection? - PullRequest
1 голос
/ 15 апреля 2020

когда я запускаю следующий код:

with sqlite3.connect("example.db") as con:
    c=con.cursor()
    c.execute("CREATE TABLE test (id,name) ")

все работает нормально.

Но когда я использую mysql.connector:

import mysql.connector as mariadb

with mariadb.connect(user='root', password='root', database='publications') as con:
    c = con.cursor()
    c.execute("CREATE TABLE test (id INT,name VARCHAR(45))")

я получаю это ошибка:

File "<...>", line 4, in <module>
with mariadb.connect(user='root', password='root', database='publications') as con:
AttributeError: __enter__

Может кто-нибудь сказать мне причину этого? Как я прочитал в "PEP 343 -" с "Заявлением" , чтобы использовать объект с оператором with, вам необходимо реализовать __enter__() и __exit__() -метод. Похоже, что это реализовано в sqlite3, но не в mysql.connection. Но в чем причина этого? Есть ли более глубокая причина или Mysql просто не реализован?

Спасибо:)

1 Ответ

0 голосов
/ 15 апреля 2020

В столбцах SQLite нет типа (тип по умолчанию). В MySQL столбцы должны иметь явный тип. Добавьте тип и решенную проблему.

Например, оператор SQL может выглядеть примерно так:

CREATE TABLE test (id int, name varchar(50))
...