SQLAlchemy: TypeError: MetaData.__init__() получил неожиданный аргумент ключевого слова «bind»Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 SQLAlchemy: TypeError: MetaData.__init__() получил неожиданный аргумент ключевого слова «bind»

Сообщение Anonymous »

Некоторые сведения: я новичок в SQLAlchemy, поэтому просматривал документацию, пытаясь найти способ выполнения запросов к уже существующей базе данных MariaDB в Flask-SQLAlchemy. Это привело меня к следующему: документ SQLAlchemy in Flask, который, похоже, точно ответил на мой вопрос. Я создал небольшой проект на основе раздела «Декларативный» документа, затем изменил его для раздела «Уровень абстракции SQL», в результате чего получились следующие файлы и файловая структура:
  • sql_abstract

    .venv
  • app< /p>

    _init_.py
  • database.py
  • models.py
  • routes.py
[*]
config.py

[*]run.py



_init_.py

Код: Выделить всё

from flask import Flask

def create_app():
app = Flask(__name__)
app.config.from_object('config')

from app.routes import register_routes
register_routes(app)

return app
database.py

Код: Выделить всё

from sqlalchemy import create_engine, MetaData, Table
from config import conf

engine=create_engine(conf)
metadata = MetaData(bind=engine)
models.py

Код: Выделить всё

from sqlalchemy import Table
from app.database import metadata

basic = Table('tblBasic', metadata, autoload=True)
routes.py

Код: Выделить всё

from app.models import basic

def register_routes(app):
@app.route('/')
def index():
res= basic.select(basic.c.name == "John").execute().first()
return res
run.py

Код: Выделить всё

#get the app from the app folder's init.py
from app import create_app

flask_app=create_app()
if __name__ == '__main__':
flask_app.run()
Это приводит к следующей ошибке:

Код: Выделить всё

File "c:\...\app\database.py", line 5, in 
metadata = MetaData(bind=engine)
^^^^^^^^^^^^^^^^^^^^^
TypeError: MetaData.__init__() got an unexpected keyword argument 'bind'
Я в замешательстве, потому что это дословный код из документа, но в документации SQLAlchemy также упоминается, что метаданные «хранят коллекцию объектов Table, а также < Strong>необязательная привязка к механизму или соединению."
Я пробовал импортировать из sqlalchemy.schema, думая, что могу импортировали другой класс с тем же именем, но это не сработало.
Я также попробовал использовать Metadata.reflect(bind=engine), как в этом примере, в результате чего строка 5 файла data.py стала такой:

Код: Выделить всё

metadata = MetaData().reflect(bind=engine)
и строка 4 файла models.py становится:

Код: Выделить всё

basic=metadata.tables["tblBasic"]
но в результате метаданные вместо этого стали объектом NoneType.
Кто-нибудь знает, что вызывает эту ошибку и как ее исправить? Я в растерянности.

Подробнее здесь: https://stackoverflow.com/questions/790 ... argument-b
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»