如何将 SQLAlchemy 声明性模型拆分为模块?

2023-12-22

我需要定义多个包含 SQLAlchemy 声明性类的模块。我在每个模块中编写了一个名为subclass_base()其中一个 Base 实例declarative_base()实例化后传递。第一个模块的subclass_base()正确调用会子类化 Base 实例,并且子类从函数外部可见。第二个模块的调用完成时没有错误,但从函数内部和外部来看,所有子类都反映在Base.__subclasses__只是某些时候。这是一个最小的工作示例,每个模块中只有 1 个类定义:

模型文件

from sqlalchemy import Column, Integer, String
def subclass_base(Base):
    class Roles(Base):
        __tablename__ = 'roles'

        id = Column(Integer, primary_key=True)
        name = Column(String(32))

模型b.py

from sqlalchemy import Column, Integer, String
def subclass_base(Base):
    class Locations(Base):
         __tablename__ = 'locations'

        id = Column(Integer, primary_key=True)
        name = Column(String(64))

test.py

from sqlalchemy.ext.declarative import declarative_base
from modela import subclass_base as amod
from modelb import subclass_base as bmod

def test():
    count = 0
    while True:
        try:
            Base = declarative_base()

            amod(Base)

            bmod(Base)
            sc = [subclass.__name__ for subclass in Base.__subclasses__()]
            assert(len(sc) == 2)

            print('.', end='')
            count += 1
        except AssertionError:
            print("Failed after {} successful pass(es)".format(count))
            count = 0

我怀疑这个问题是我忽略了 declarative_base() 进行的元类工作的一个特定问题,但我似乎无法弄清楚发生了什么。我也想知道这是否是一个继承问题。我是否应该采取不同的架构方法,而不是使用函数来子类化单个基类?


不要在函数内定义类。只需定义Base在单个定义模块中,然后从其他模块导入该模块:

db.py

from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()
Session = sessionmaker()

def bind_engine(engine):
    Base.metadata.bind = engine
    Session.configure(bind=engine)

模型文件

from sqlalchemy import Column, Integer, String
from db import Base

class Roles(Base):
    __tablename__ = 'roles'

    id = Column(Integer, primary_key=True)
    name = Column(String(32))

模型b.py

from sqlalchemy import Column, Integer, String
from db import Base

class Locations(Base):
    __tablename__ = 'locations'

    id = Column(Integer, primary_key=True)
    name = Column(String(64))

用户脚本.py

 from sqlalchemy import create_engine
 engine = create_engine('postgresql://user:pwd@server/database')
 from yourproject.db import bind_engine
 bind_engine(engine)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 SQLAlchemy 声明性模型拆分为模块? 的相关文章

  • 将 pandas 数据框中的列减去其第一个值

    我需要将 pandas 数据帧的一列中的所有元素减去其第一个值 在这段代码中 pandas 抱怨 self inferred type 我猜这是循环引用 df Time df Time df Time 0 在这段代码中 pandas 抱怨为
  • 打印 scrapy 请求的“响应”

    我正在尝试学习 scrapy 在遵循教程的同时 我正在尝试进行细微的调整 我想简单地从请求中获取响应内容 然后我会将响应传递到教程代码中 但我无法发出请求并获取响应内容 建议就好 from scrapy http import Respon
  • 替换字符串列表中的 \x00 的最佳方法?

    我有一个来自已解析 PE 文件的值列表 其中包括 x00每个部分末尾的空字节 我希望能够删除 x00字符串中的字节而不删除所有字节 x 文件中的 s 我试过做 replace and re sub 但并没有取得太大成功 使用Python 2
  • Python 中的六边形自组织映射

    我在寻找六边形 自组织映射 http en wikipedia org wiki Self organizing map在Python上 准备好模块 如果存在的话 绘制六边形单元格的方法 将六边形单元作为数组或其他方式使用的算法 About
  • Dask DataFrame 的逐行处理

    我需要处理一个大文件并更改一些值 我想做这样的事情 for index row in dataFrame iterrows foo doSomeStuffWith row lol doOtherStuffWith row dataFrame
  • Sorted(key=lambda: ...) 背后的语法[重复]

    这个问题在这里已经有答案了 我不太明白背后的语法sorted 争论 key lambda variable variable 0 Isn t lambda随意的 为什么是variable在看起来像的内容中陈述了两次dict 我认为这里的所有
  • 无法包含外部 pandas 文档 Pycharm v--2018.1.2

    我无法包含外部 pandas 文档Pycharm v 2018 1 2 例如 numpy gt http docs scipy org doc numpy reference generated module name element na
  • Python:当前目录是否自动包含在路径中?

    Python 3 4 通过阅读其他一些 SO 问题 似乎如果moduleName py文件位于当前目录之外 如果要导入它 必须将其添加到路径中sys path insert 0 path to application app folder
  • 反加入熊猫

    我有两个表 我想附加它们 以便仅保留表 A 中的所有数据 并且仅在其键唯一时添加表 B 中的数据 键值在表 A 和 B 中是唯一的 但在某些情况下键将出现在表 A 和 B 中 我认为执行此操作的方法将涉及某种过滤联接 反联接 以获取表 B
  • 如何为多组精灵创建随机位置?

    我尝试使用 blit 和 draw 方法进行 for 循环 并为 PlayerSprite 和 Treegroup 使用不同的变量 for PlayerSprite in Treegroup surface blit PlayerSprit
  • 使用 genfromtxt 导入 numpy 中缺失值的 csv 数据

    我有一个 csv 文件 看起来像这样 实际文件有更多的列和行 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 假设文件的名称是info csv如果我尝试使用导入它 data numpy genfromtxt i
  • Python While 循环,and (&) 运算符不起作用

    我正在努力寻找最大公因数 我写了一个糟糕的 运算密集型 算法 它将较低的值减一 使用 检查它是否均匀地划分了分子和分母 如果是 则退出程序 但是 我的 while 循环没有使用 and 运算符 因此一旦分子可整除 它就会停止 即使它不是正确
  • 在wxpython中使用wx.TextCtrl并在按钮单击后显示数据的简单示例 - wx新手

    我正在学习 python 并尝试使用 wxpython 进行 UI 开发 也没有 UI exp 我已经能够创建一个带有面板 按钮和文本输入框的框架 我希望能够在文本框中输入文本 并让程序在单击按钮后对输入框中的文本执行操作 我可以获得一些关
  • 我可以使用 dask 创建 multivariate_normal 矩阵吗?

    有点相关这个帖子 https stackoverflow com questions 52337612 random multivariate normal on a dask array 我正在尝试复制multivariate norma
  • 在谷歌C​​olab中使用cv2.imshow()

    我正在尝试通过输入视频来对视频进行对象检测 cap cv2 VideoCapture video3 mp4 在处理部分之后 我想使用实时对象检测来显示视频 while True ret image np cap read Expand di
  • 在pycharm中调试python代码

    这个问题类似于this https stackoverflow com questions 10240018 how to use pycharm to debug python script一 我正在尝试调试pyethapp https
  • 使用 Doc2vec 后如何解释 Clusters 结果?

    我正在使用 doc2vec 将关注者的前 100 条推文转换为矢量表示形式 例如 v1 v100 之后 我使用向量表示来进行 K 均值聚类 model Doc2Vec documents t size 100 alpha 035 windo
  • Plotly:如何避免巨大的 html 文件大小

    我有一个 3D 装箱模型 它使用绘图来绘制输出图 我注意到 绘制了 600 个项目 生成 html 文件需要很长时间 文件大小为 89M 这太疯狂了 我怀疑可能存在一些巨大的重复 或者是由单个项目的 add trace 方法引起的 阴谋 为
  • asyncio - 多次等待协程(周期性任务)

    我正在尝试为异步事件循环创建定期任务 如下所示 但是我收到 RuntimeError 无法重用已等待的协程 异常 显然 asyncio 不允许等待相同的可等待函数 如中讨论的这个错误线程 https bugs python org issu
  • 如何对字符串列表进行排序?

    在 Python 中创建按字母顺序排序的列表的最佳方法是什么 基本回答 mylist b C A mylist sort 这会修改您的原始列表 即就地排序 要获取列表的排序副本而不更改原始列表 请使用sorted http docs pyt

随机推荐

  • 查找峰的半峰全宽

    我一直试图找出蓝色峰的半峰全宽 FWHM 见图 绿色峰和洋红色峰组合起来形成蓝色峰 我一直在使用以下方程来查找绿色和洋红色峰的 FWHM fwhm 2 np sqrt 2 math log 2 sd其中 sd 标准差 我创建了绿色和洋红色峰
  • 在 UITextView 中快速将“返回”按钮功能更改为“完成”

    我想在用户打字时摆脱键盘的 返回 功能 这样就没有新行 所以我希望 返回 键充当 完成 功能 这样它就会隐藏键盘 我正在使用可编辑的 UITextView 因此用户可以输入他们的帖子 并将其发布到主时间线 但由于我有固定的单元格 我不希望用
  • 使用 data.table 包的笛卡尔积

    使用 R 中的 data table 包 我尝试使用合并方法创建两个 data table 的笛卡尔积 就像在基础 R 中所做的那样 在基地进行以下工作 assume this order data orders lt data frame
  • angularjs 处理 $resource $promise 错误

    如果连接到我的 API 时出现错误 有人可以帮我弄清楚如何在 AngularJS 工厂中返回硬编码数据吗 我的硬编码数据位于另一个名为 dataFactory 的工厂中 感谢您的帮助 service factory ScheduleFact
  • JavaScript 与严格的页面对象模式兼容吗?

    我使用 Java 的页面对象模式构建了各种测试自动化框架 https code google com p selenium wiki PageObjects https code google com p selenium wiki Pag
  • 错误:意外请求:即使在 karma/jasmine 单元测试中使用 html2js 时,仍会获取嵌套指令的视图/部分/*

    我正在使用 Karma 和 Jasmine 对我的 angularjs 应用程序进行单元测试 我有一个指令 例如指令 A 模板 其中正在渲染另一个指令 例如指令 B 尽管它在应用程序中工作正常 但测试用例无法渲染指令 B 的模板 以下是我收
  • 过去两年中给定位置的所有 Facebook 活动的列表

    我正在尝试做什么 我正在尝试提取所有内容的列表public2012 年和 2013 年在特定城市发生的 facebook 事件 此外 对于每个事件 我想提取以下内容 活动名称 事件描述 date location 参加 可能 拒绝的人数 到
  • 用于同时过滤和转换的列表理解中的中间变量[重复]

    这个问题在这里已经有答案了 我有一个想要标准化的向量列表 在 Python 中 同时删除最初具有较小范数的向量 输入列表是 例如 a 1 1 1 2 2 2 3 4 我需要输出是 x n y n with n x 2 y 2 0 5 例如
  • 使用 R 添加谷歌图块

    我正在使用leaflet与 R 一起打包来生成交互式地图 我想使用 Google 地图层 但是 Google 地图不能作为该函数的参数addProviderTiles 如何使用 R 添加这些谷歌图层 非常感谢 尝试这个leaflet gt
  • Gitlab 上的 SSH 密钥不断要求输入密码

    我已经调试这个问题一两个小时了 我目前使用 Gitlab 和 Mac OS X 10 9 2 今天 我试图git pull origin master从我们的主分支 这样我就可以获得最新版本进行开发 我一直使用这些配置 并且不记得更改过任何
  • 在 ftplib storbinary 中创建丢失的目录

    我正在使用 pycurl 在 python 中通过 ftp 传输文件 我可以使用以下命令在远程服务器上自动创建丢失的目录 c setopt pycurl FTP CREATE MISSING DIRS 1 由于某些原因 我必须切换到 ftp
  • 使用 Apache FOP 将字母放在 XSL-FO 中带下划线的文本下

    我有一个项目 要求我在一段文本中的某些带下划线的文本下方放置一个 ID 字符串 以下是使用带有灰色边框的内联 SVG 对象来显示布局的示例 我可以使用带有基线偏移的内联元素来接近 然后使用 SVG 来渲染文本 然而 这有一个缺点 我认为 我
  • Pandas:一列上的近似连接,其他列上的精确匹配

    我有两个 pandas 数据框 我想在多个列 例如 3 列 上精确地加入 合并 并在一个 日期 列上近似地 即最近的邻居 加入 合并 我还想返回它们之间的差异 天数 每个数据集大约有 50 000 行长 我对内部联接最感兴趣 但 剩余 也很
  • Woocommerce 产品可由其作者针对特定用户角色进行编辑

    我在我的 WordPress 网站上注册了不同角色的不同用户 除了其他用户之外 我还希望允许广告商 具有广告商角色的用户 广告商是我创建的自定义角色 将他们自己的产品放在我的网站上并进行管理 但他们只能管理 创建 编辑和删除 自己的产品 而
  • 如何使用 Microsoft Graph API 获取用户所属的组名?

    我想知道用户在 AAD 中所属的组列表 根据组的成员资格 他们可以执行另一项功能 为了实现此目的 我使用了 MS Graph API 但我只获得组 ID 而不是组名称 我使用图 API 使用了以下两种方式 使用的第一种方法 await gr
  • 如何使用管道(ffmpeg + imagemagick)构建视频缩略图表? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 Windows 上使用管道 ffmpeg imagemagick 构建视频缩略图表而不使用临时文件 UPDATE Here htt
  • 反如果运动

    我最近遇到了一个非常有趣的网站 它表达了一个非常有趣的想法 反假设运动 你可以在这里看到这个www antiifcampaign com http www antiifcampaign com index html 我不得不承认 复杂的嵌套
  • 如何使用XSLT将换行符转换为
    ? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 XSLT xsl text 解释换行符 https stackoverflow com questions 185101 interpreting newlines with xslt xslt
  • 浏览器之外的 JavaScript

    我正在考虑用 Javascript 编写一些代码作为命令行程序运行 与浏览器或 Web 无关 对于命令行实用程序来说 它需要像平常一样访问文件和目录 对于这种情况 就稳定性和性能而言 最佳的 Windows Javascript 实现是什么
  • 如何将 SQLAlchemy 声明性模型拆分为模块?

    我需要定义多个包含 SQLAlchemy 声明性类的模块 我在每个模块中编写了一个名为subclass base 其中一个 Base 实例declarative base 实例化后传递 第一个模块的subclass base 正确调用会子类