Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2015 17:58:49

katb
Зарегистрирован: 2015-05-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

Задача такая:
имеется веб приложение на фласке.
Обычно орм определяется а модуле аппликейшена и импортируется в модуле моделей:

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.
Как лучше это сделать?
Заранее спасибо

Офлайн

#2 Май 21, 2015 18:04:15

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

Один из краеугольных камней объектно-ориентированного программирования - наследование. Почему вы не хотите сделать базовый класс и наследовать его вместо db.Model? Там у вас будет  stlf.db.



Офлайн

#3 Май 21, 2015 18:28:44

katb
Зарегистрирован: 2015-05-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

Возможно я не совсем понятно описал что хочу.
Я бы хотел написать отдельный пакет, который не будет привязан к 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 для этих моделей

Офлайн

#4 Май 21, 2015 18:32:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

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


ну импортируйте другой модуль, в чем проблема то?



Офлайн

#5 Май 21, 2015 18:34:30

katb
Зарегистрирован: 2015-05-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

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

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

Но теряются при этом возможности flask_sqlalchemy

Отредактировано katb (Май 21, 2015 18:39:20)

Офлайн

#6 Май 21, 2015 19:06:58

4kpt_III
Зарегистрирован: 2014-12-22
Сообщения: 999
Репутация: +  39  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

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

P.S. В этом случае можно использовать единый коннектор да и не потеряете Вы практически ничего.

Отредактировано 4kpt_III (Май 21, 2015 19:07:37)

Офлайн

#7 Май 22, 2015 01:41:36

katb
Зарегистрирован: 2015-05-21
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Как передать объект в модуль вместо импортирования

Спасибо за отклик.
Уже выпилил flask-alchemy

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version