程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法?

开发过程中遇到Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法的问题如何解决?下面主要结合日常开发的经验,给出你关于Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法的解决方法建议,希望对你解决Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法有所启发或帮助;

好吧,我想我明白了。解决方案是在之外声明模型对象@H_885_3@model/__init__.py。我得出的结论是,__init__.py当从模块中导入某些内容时(在这种情况下@H_885_3@model),将其作为第一个文件导入,这会引起问题,因为模型对象是在init_model()调用之前声明的。

为了避免这种情况,我在@H_885_3@model模块中创建了一个新文件,例如objects.py。然后,我Event在此文件中声明了所有模型对象(如)。

然后,我可以像这样导入我的模型:

from PRJ.model.objects import Event

此外,为了避免autoload-with为每个表指定,我在以下代码的末尾添加了这一行init_model()

Base.Metadata.bind = ENGIne

这样,我可以不使用样板代码来声明模型对象,如下所示:

class Event(BasE):
    __tablename__ = 'events'
    __table_args__ = {'scheR_623_11845@a': 'events', 'autoload': TruE}

    event_IDentifIErs = relationship(EventIDentifIEr)

    def __repr__(self):
        return "<Event(%s)>" % self.ID

解决方法

我想使用自动加载功能来使用现有数据库。我知道如何不使用声明性语法(model / _ init _.py):

def init_model(ENGInE):
    """Call me before using any of the tables or classes in the model"""
    t_events = Table('events',Base.metadata,scheR_623_11845@a='events',autoload=True,autoload_with=ENGInE)
    orm.mapper(Event,t_events)

    Session.configure(bind=ENGInE)

class Event(object):
    pass

这工作正常,但我想使用声明性语法:

class Event(BasE):
    __tablename__ = 'events'
    __table_args__ = {'scheR_623_11845@a': 'events','autoload': TruE}

不幸的是,这样我得到:

这里的问题是,在导入模型的阶段(在init_model()中可用),我不知道从哪里获取引擎(在autoload_with中使用引擎)。我尝试添加

@H_885_3@meta.base.metadata.bind(ENGInE)

到environment.py,但不起作用。任何人都找到了一些优雅的解决方案?

大佬总结

以上是大佬教程为你收集整理的Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法全部内容,希望文章能够帮你解决Pylons中具有自动加载(反射)功能的SQLAlchemy声明性语法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。