Пример sqlalchemy для существующей базы данных

Проблема: необходим полный рабочий пример автоматического сопоставления sqlalchemy с существующей базой данных в приложении с несколькими привязками.

Я хочу привязаться к двум базам данных и иметь одну автоматическую карту таблиц. Мне нужно это сделать, потому что у меня нет контроля над одной БД, поэтому мне придется постоянно переписывать свои модели и удалять новые таблицы каждый раз, когда я мигрирую.

Мне нравятся ответы, данные здесь , но я не могу заставить его работать во Flask (я могу использовать sqlalchemy только для запроса в соответствии с примером).

Модель model.py, которую я установил из приведенного выше примера, приводит к

РЕДАКТИРОВАТЬ Я потянул за линию

 db.Model.metadata.reflect[db.engine]

из другого сообщения, и это должно быть очень простое решение db.Model.metadata.reflect (db.engine)

вот мой model.py

from app import db
from sqlalchemy.orm import relationship

db.Model.metadata.reflect[db.engine]#change to (db.engine)

class Buildings(db.Model):
    __table__ = db.Model.metadata.tables['test']
    __bind_key__ = 'chet'
    def __repr__(self):
        return self.test1

.... other models from sqlalchemy uri here...

я понимаю это

>>> from app import db, models
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "app/__init__.py", line 69, in <module>
    from app import views, models
  File "app/views.py", line 1, in <module>
    from app import app,models, db
  File "app/models.py", line 163, in <module>
    db.Model.metadata.reflect[db.engine]
TypeError: 'instancemethod' object has no attribute '__getitem__'

Вот мой config.py

SQLALCHEMY_DATABASE_URI = 'postgresql://chet@localhost/ubuntuweb'

SQLALCHEMY_BINDS = {
    'chet':        'postgresql://chet@localhost/warehouse',
 }

вот мой файл init.py

from flask import Flask
from flask_bootstrap import Bootstrap
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.admin import Admin, BaseView, expose
from flask.ext.script import Manager
from flask.ext.migrate import Migrate, MigrateCommand
from flask.ext.login import LoginManager, UserMixin, login_required

app = Flask(__name__)

app.config['UPLOAD_FOLDER'] = 'app/static'
app.config.from_object('config')
db = SQLAlchemy(app)
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

Bootstrap(app)

from app import views, models
admin = Admin(app)

person Chet Meinzer    schedule 20.10.2015    source источник


Ответы (1)


В вашем коде есть

db.Model.metadata.reflect[db.engine]

Когда это должно быть

db.Model.metadata.reflect(db.engine)  # parens not brackets

Это должно было быть довольно очевидно из трассировки стека ...

person Adam Smith    schedule 20.10.2015
comment
Спасибо за вашу помощь. Я вытащил жесткие скобки из ссылки в моем сообщении, и часть моего вопроса заключается в том, почему в ответе есть скобки. Это было из stackoverflow.com/questions/17652937/ привязать декларативную базу к движку: db.Model.metadata.reflect [db.engine] - person Chet Meinzer; 21.10.2015
comment
@ChetMeinzer, потому что ответ неправильный. Я сейчас отредактирую, чтобы исправить. - person Adam Smith; 21.10.2015
comment
@ChetMeinzer (вы заметите, что получивший наибольшее количество голосов и принятый ответ имеет правильный синтаксис!: D) - person Adam Smith; 21.10.2015
comment
Вы когда-нибудь ищите что-то, и это прямо у вас под носом. провел часы в замешательстве, готовый вернуться к работе. еще раз спасибо. - person Chet Meinzer; 21.10.2015
comment
@ChetMeinzer рад, что смог помочь! :) - person Adam Smith; 21.10.2015