Найти - Пользователи
Полная версия: Как передать объект в модуль вместо импортирования
Начало » Python для новичков » Как передать объект в модуль вместо импортирования
1
katb
Задача такая:
имеется веб приложение на фласке.
Обычно орм определяется а модуле аппликейшена и импортируется в модуле моделей:

app/__init__.py
app = Flask(__name__)
# Configurations
app.config.from_object('config')
db = SQLAlchemy(app)
from app import views, models

models.py
from app import db
class Country(db.Model):
    id = db.Column(db.String(2), primary_key=True)
    iso2code = db.Column(db.String(2), unique=True)
    iso3code = db.Column(db.String(3), unique=True)
    name = db.Column(db.String(64))
    capital = db.Column(db.String(64))
Я бы хотел вместо импорта передавать объект db.
Как лучше это сделать?
Заранее спасибо
FishHook
Один из краеугольных камней объектно-ориентированного программирования - наследование. Почему вы не хотите сделать базовый класс и наследовать его вместо db.Model? Там у вас будет  stlf.db.
katb
Возможно я не совсем понятно описал что хочу.
Я бы хотел написать отдельный пакет, который не будет привязан к flask_sqlalchemy, только к sqlalchemy.
Но в приложении используется flask_sqlalchemy, поэтому нужно както использовать в нем модели из моего пакета.
Извините за неразбериху в первом посте.
Сейчас импортируется уже готовый объект из app/__init__:
from flask.ext.sqlalchemy import SQLAlchemy
...
app.config.from_object('config')
db = SQLAlchemy(app)

По сути, я бы мог в models.py импортировать flask.ext.sqlalchemy import SQLAlchemy
но я не хочу использовать flask для этих моделей
FishHook
katb
По сути, я бы мог в models.py импортировать flask.ext.sqlalchemy import SQLAlchemy
но я не хочу использовать flask для этих моделей


ну импортируйте другой модуль, в чем проблема то?
katb
FishHook
ну импортируйте другой модуль, в чем проблема то?
Проблема в том, что flask_sqlalchemy не будет работаеть с моделями sqlalchemy

Нашел как это можно реализовать
https://github.com/mitsuhiko/flask-sqlalchemy/issues/98

Но теряются при этом возможности flask_sqlalchemy
4kpt_III
katb
Да какие там возможности у flask-sqlalchemy. Их там почти нет. Уже давно использую чистую алхимию без этой мутной обвязки Если Вы хотите использовать отдельно модели, которые написаны с наследованием от flask-sqlalchemy и модели чистой sqlalchemy, то Вам придется написать самостоятельный коннектор к ним через scooped_session (создавать еще один объект сессии). Можно попробовать обмануть flask-sqlalchemy но мне лень было ковыряться (проще было добавить 5 строк кода). В итоге для Вас самым простым решением будет выпиливание из Вашего проекта flask-sqlalchemy.

P.S. В этом случае можно использовать единый коннектор да и не потеряете Вы практически ничего.
katb
Спасибо за отклик.
Уже выпилил flask-alchemy
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB