导入关系中使用的 SQLAlchemy 模型?

     2023-04-12     69

关键词:

【中文标题】导入关系中使用的 SQLAlchemy 模型?【英文标题】:Importing SQLAlchemy models used in relationship? 【发布时间】:2019-10-22 21:03:55 【问题描述】:

我是 SQLAlchemy 的新手(使用 Python 3),发现以下令人费解。在我的简单示例中,在单独的文件中定义了 2 个模型类,并通过关系链接它们。

    设置是否正确?我的代码要求Animal.py import Owner 因为定义了关系,否则app/main.py 将抛出关于Owner class not found 的错误。但是,official docs 和其他在线示例似乎没有导入与当前类有关系的其他类。

    model/__init__.py 对我的情况有用吗?如果是这样,它将用于什么?看到an example that used a __init__.py file。

Github 回购:https://github.com/nyxynyx/sqlalchemy-class-import-error

文件结构

app/main.py

import sys
sys.path.append('..')

from lib.db import db_session
from models.foo.Animal import Animal

if __name__ == '__main__':
    print(Animal.query.all())

models/foo/Animal.py

from sqlalchemy import *
from sqlalchemy.orm import relationship
from ..Base import Base
from .Owner import Owner    <-------------- !!!!! if not imported, error occurs when running main.py !!!!!

class Animal(Base):
    __tablename__ = 'animals'
    id = Column(Integer, primary_key=True)
    name = Column(Text)
    owner_id = Column(Integer, ForeignKey('owners.id'))

    owner = relationship('Owner')

models/Foo/Owner.py

from sqlalchemy import *
from ..Base import Base

class Owner(Base):
    __tablename__ = 'owners'
    id = Column(Integer, primary_key=True)
    name = Column(Text)

lib/db.py

import json
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy import create_engine

with open('../settings.json') as f:
    settings = json.load(f)
user, password, host, port, dbname = settings['db']['user'], settings['db']['password'], settings['db']['host'], settings['db']['port'], settings['db']['dbname']

connection_url =  f'postgresql://user:password@host:port/dbname'
engine = create_engine(connection_url)
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
db_session = scoped_session(Session)

【问题讨论】:

@AndrewAllen 每个文件有 1 个模型类有什么好处吗? 【参考方案1】:

animal.py 很好。问题是,如果从不导入 owner.py,则 sqlalchemy 永远不会看到 Owner 模型/表,因此它永远不会将其注册到 Base 元数据中。您可以将 Owner 从 animal.py 导入 main.py 作为

import models.foo.Owner

在保留单独的模型文件的同时查看它的工作情况。

【讨论】:

如何在 SQLAlchemy 中使用动态关系映射层次结构?

】如何在SQLAlchemy中使用动态关系映射层次结构?【英文标题】:HowcanImapahierarchyinSQLAlchemywithdynamicrelationships?【发布时间】:2010-08-2620:51:50【问题描述】:我正在定义这样的SQLAlchemy模型:classSubProject(Base):active=Column(Boolean)classProjec... 查看详情

如何使用关系在 SQLAlchemy 中使用外键自动填充表?

】如何使用关系在SQLAlchemy中使用外键自动填充表?【英文标题】:HowtoautofilltablewithforeignkeysinSQLAlchemyusingrelationships?【发布时间】:2022-01-1208:41:12【问题描述】:使用SQLAlchemy我有三个模型:Parent1、Parent2和Child,其中Parent1有与Pare... 查看详情

如何从 SQLAlchemy 关系中的父级中删除子级

】如何从SQLAlchemy关系中的父级中删除子级【英文标题】:HowtoremoveachildfromaparentinSQLAlchemyrelationship【发布时间】:2017-06-2906:01:58【问题描述】:这是我的模型(忽略导入):classParent(Base):__tablename__=\'parents\'id=Column(Integer,primary_key=... 查看详情

Flask-SQLAlchemy:用户角色模型和关系

】Flask-SQLAlchemy:用户角色模型和关系【英文标题】:Flask-SQLAlchemy:UserroleModelsandrelationship【发布时间】:2022-01-1210:32:18【问题描述】:我正在尝试创建Flask-SqlAlchemy数据库模型,并且需要将用户链接到单个角色。示例角色:“用户... 查看详情

SQLAlchemy 使用关联配置与自我的多对多关系

】SQLAlchemy使用关联配置与自我的多对多关系【英文标题】:SQLAlchemyconfiguringmany-to-manyrelationshiptoselfusingAssociation【发布时间】:2011-08-3118:05:52【问题描述】:我在配置与模型本身的多对多关系时遇到问题。当我使用normal关系配置... 查看详情

SQLAlchemy 使用关系时性能低下

】SQLAlchemy使用关系时性能低下【英文标题】:SQLAlchemylowperformancewhenuserelationship【发布时间】:2015-12-0918:22:16【问题描述】:我的Flask应用程序中有SQLAlchemy模型:classUser(db.Model):__tablename__=\'users\'id=db.Column(db.Integer,primary_key=True)phot... 查看详情

pythonorm框架:sqlalchemy(代码片段)

...对象模型来操作数据库做替代第一部分    SqlAlchemy本身无法直接操作数据库,它是建立在第三方数据库AP 查看详情

使用 sqlalchemy 的复合键关系

】使用sqlalchemy的复合键关系【英文标题】:Relationsoncompositekeysusingsqlalchemy【发布时间】:2011-11-2205:10:48【问题描述】:我有这个简单的Author-Books模型,但找不到将firstName和lastName设为复合键并关联使用它的方法。有什么想法吗?... 查看详情

在 SQLAlchemy 中“扩展”自反多对多关系

】在SQLAlchemy中“扩展”自反多对多关系【英文标题】:"Expanding"areflexiveManytoManyrelationshipinSQLAlchemy【发布时间】:2013-07-0116:04:24【问题描述】:使用Elixir0.7.1和SQLAlchemy0.7.8,我创建了一个与自身具有多对多关系的模型,如... 查看详情

努力想出 SQLAlchemy 模型关系

】努力想出SQLAlchemy模型关系【英文标题】:StrugglingtocomeupwithSQLAlchemymodelrelation【发布时间】:2021-02-0719:31:00【问题描述】:这里是SQL新手,请耐心等待。我正在尝试存储来自不同新闻网站的标题数据。试图找出正确的数据库结... 查看详情

SQLAlchemy - 连接表的关系上的 order_by

】SQLAlchemy-连接表的关系上的order_by【英文标题】:SQLAlchemy-order_byonrelationshipforjointable【发布时间】:2011-07-1916:00:37【问题描述】:我正在使用声明性SQLAlchemy,我有三个模型:Role、Permission和RolePermission。在我的Role模型中,我有... 查看详情

SQLAlchemy ORM 不能使用复合外键

】SQLAlchemyORM不能使用复合外键【英文标题】:SQLAlchemyORMnotworkingwithcompositeforeignkeys【发布时间】:2020-04-2810:35:32【问题描述】:我正在尝试使用几个相关模型构建一个示例,如下所示。我们有一个模型B与模型C的关系为1:n;那么... 查看详情

如何在 SQLAlchemy 中定义与同一张表的两个关系

】如何在SQLAlchemy中定义与同一张表的两个关系【英文标题】:HowtodefinetworelationshipstothesametableinSQLAlchemy【发布时间】:2011-11-2418:29:36【问题描述】:我已经查看了SQLAlchemy教程和其他类似问题,但我似乎很难让这个加入工作:场... 查看详情

如何在 SQLAlchemy 模型中使用 SQLAlchemy Utils

】如何在SQLAlchemy模型中使用SQLAlchemyUtils【英文标题】:HowtouseSQLAlchemyUtilsinaSQLAlchemymodel【发布时间】:2019-06-0100:01:40【问题描述】:我正在尝试创建一个使用UUID作为主键的用户模型:fromsrc.dbimportdb#SQLAlchemyinstanceimportsqlalchemy_utils... 查看详情

SQLAlchemy - 不要对关系强制外键约束

】SQLAlchemy-不要对关系强制外键约束【英文标题】:SQLAlchemy-don\'tenforceforeignkeyconstraintonarelationship【发布时间】:2011-10-2922:06:50【问题描述】:我有一个Test模型/表和一个TestAuditLog模型/表,使用SQLAlchemy和SQLServer2008。两者之间的关... 查看详情

Flask/SQLAlchemy - 多对多关系的关联模型和关联表之间的区别?

】Flask/SQLAlchemy-多对多关系的关联模型和关联表之间的区别?【英文标题】:Flask/SQLAlchemy-Differencebetweenassociationmodelandassociationtableformany-to-manyrelationship?【发布时间】:2015-08-0501:45:29【问题描述】:我从FlaskMega教程开始学习这些东... 查看详情

在烧瓶中使用 SqlAlchemy 模型

】在烧瓶中使用SqlAlchemy模型【英文标题】:UsingSqlAlchemyModelsinflask【发布时间】:2015-12-1420:19:59【问题描述】:我最初使用SqlAlchemy创建了一些模型来设置数据库。最初我解析一些XML文件并填充数据库。这是我在服务器上设置应用... 查看详情

sqlalchemy,使用反向包含(不在)子列值列表中进行选择

】sqlalchemy,使用反向包含(不在)子列值列表中进行选择【英文标题】:sqlalchemy,selectusingreverse-inclusive(notin)listofchildcolumnvalues【发布时间】:2013-11-1823:57:46【问题描述】:我在flask-sqlalchemy中有一个典型的帖子/标签(许多标签与... 查看详情