Проблема: необходим полный рабочий пример автоматического сопоставления 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)