python - SQLAlchemy:实例化新对象时如何传递额外参数

标签 python sqlalchemy

我使用 SQLAlchemy 定义了一个表并将其映射到一个类:

meta = MetaData(engine)
item_table = Table(
    'Item', meta,
    Column('id', Integer, primary_key=True, nullable=False),
    Column('name', String(40), nullable=False)
)

class Item(object):
    def init(self, created_by):
        self.created_by = created_by
    def __repr__(self):
        return '<Item %r created by %r>' % (self.name, self.created_by)

mapper(Item, item_table)

如您所见,Item 有一个 created_by 字段,该字段并非来自数据库。目前,我使用 item.init("created_by") 方法生存,该方法在创建 item 实例后立即调用。我觉得这种丑陋,也许有更好的方法来处理这个问题。

最佳答案

您可以订阅load事件并在那里执行您的逻辑:

class DB(object):
    def __init__(self):
        self._register_event()

    def _get_created_by(self):
        return datetime.datetime.now()

    def _register_event(self):
        @event.listens_for(Item, 'load')
        def receive_load(target, context):
            target.created_by = self._get_created_by()

    def test_select(self):
        items = session.query(Item).all()
        for item in items:
            print(item)

db = DB()
db.test_select()

关于python - SQLAlchemy:实例化新对象时如何传递额外参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284205/

相关文章:

python - 特征提取自然语言处理

python - 当使用 utf-8 编码保存为 csv 时,pandas 仅保存列表的前 100 个条目

mysql - SQLAlchemy/MySQL 二进制 blob 正在使用 utf-8 编码吗?

flask - Sqlalchemy - 加入后分组

python - BeautifulSoup 不拾取单个标签

javascript - Tornado WebSockets - InvalidStateError "Still in CONNECTING State"

python - Python 加权搜索和排序

python - 如何在运行验证器时使用字典数据更新声明性 SQLAlchemy 模型

postgresql - SQLAlchemy 对 Postgres 模式的支持

python - 设计权限系统的最佳实践