为了账号安全,请及时绑定邮箱和手机立即绑定

使用带有常规 SQLAlchemy 的 Flask SQLAlchemy 模型

使用带有常规 SQLAlchemy 的 Flask SQLAlchemy 模型

POPMUISE 2022-07-12 10:05:59
我有一个无法更改的现有模型,用 Flask-SQLAlchemy 编写。我正在编写另一个使用相同模型但不需要 Flask 的应用程序,因此我正在使用常规的 SQLAlchemy 模块。不幸的是,我得到了很多:'AttributeError:模块'DB'对于所有类型的属性都没有属性'Model' - 例如Column,Integer等有没有办法将Flask-SQLAlchemy与常规SQLAlchemy应用程序一起使用?有一个我的模型类的例子:class Table_name(Model):    __tablename__ = 'table_name'    id = db.Column(db.INTEGER, primary_key=True)    field1 = db.Column(db.INTEGER, db.ForeignKey('table1.id'), nullable=False)    field2 = db.Column(db.TEXT, nullable=False)    field3 = db.Column(db.INTEGER, db.ForeignKey('table2.id'), nullable=False)    time = db.Column(db.TIMESTAMP, nullable=False)不幸的是我无法改变它们
查看完整描述

2 回答

?
catspeake

TA贡献1111条经验 获得超0个赞

我也有同样的困境。如果它很小或一次性,您可以在不真正使用它的情况下破解 Flask 应用程序对象,如下所示:


from flask_sqlalchemy import SQLAlchemy


throw_away_app = Flask(__name__)

db = SQLAlchemy(throw_away_app)

with self.throw_away_app.app_context():

    (perform your db operation)

这对于脚本之类的简单事物相对有效。但是,如果您在多个项目之间共享一个模型并且您根本无法更改现有的 Flask 项目,那么不幸的是,这可能不是一个好的解决方案。


如果是这种情况,并且您根本无法更改现有代码库,那么创建一个新模型类并使用 vanilla SQLAlchemy 连接到现有数据库可能是有意义的。


顺便说一句,对于任何想知道如何在没有 Flask 的情况下获得 Flask-SQLAlchemy 的一些好处的未来程序员,请考虑:sqlalchemy-mixins。


查看完整回答
反对 回复 2022-07-12
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

from sqlalchemy import create_engine

from sqlalchemy import Column, Integer, String, Text, TIMESTAMP, ForeignKey

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker



Base = declarative_base()


#  connect in memory sqlite database or you can connect your own database

engine = create_engine('sqlite:///:memory:', echo=True)


# create session and bind engine

Session = sessionmaker(bind=engine)



class Table_name(Base):

    __tablename__ = 'table_name'

    id = Column(Integer, primary_key=True)

    field1 = Column(Integer, ForeignKey('table1.id'), nullable=False)

    field2 = Column(Text, nullable=False)

    field3 = Column(Integer, ForeignKey('table2.id'), nullable=False)

    time = Column(TIMESTAMP, nullable=False)


table = Table_name(field1=1, fi....)

session.add(table)

现在你可以像往常一样使用你的 ORM,比如 flask-sqlalchemy 。


文档:https ://docs.sqlalchemy.org/en/13/orm/tutorial.html


查看完整回答
反对 回复 2022-07-12
  • 2 回答
  • 0 关注
  • 197 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号