gpt4 book ai didi

python - sqlalchemy 查找表

转载 作者:行者123 更新时间:2023-12-01 06:18:25 24 4
gpt4 key购买 nike

嗨,我有一个 3NF 形式的表格

ftype_table = Table(
'FTYPE',
Column('ftypeid', Integer, primary_key=True),
Column('typename', String(50)),
base.metadata,
schema='TEMP')
file_table = Table(
'FILE',
base.metadata,
Column('fileid', Integer, primary_key=True),
Column('datatypeid', Integer, ForeignKey(ftype_table.c.datatypeid)),
Column('size', Integer),
schema='TEMP')

和映射器

class File(object): pass
class FileType(object): pass
mapper(File, file_table, properties={'filetype': relation(FileType)})
mapper(FileType, file_table)

假设Ftype表包含1:TXT 2:AVI 3:PPT

如果我创建一个像这样的文件对象,我想做的是以下内容:

file=File()
file.size=10
file.filetype= FileType('PPT')
Session.save(file)
Session.flush()

File表包含fileid:xxx,size:10,datatypeid:3

不幸的是,一个条目被添加到 FileType 表中,并且该 id 被传播到 File 表中。

有没有一种聪明的方法可以使用 sqlalchemy 实现上述目标,而不需要对 FileType 表进行查询来查看条目是否存在

谢谢

最佳答案

UniqueObject 配方是这里的标准答案:http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject 。这个想法是使用 __metaclass__.call()File.__new__() 覆盖 File 的创建,以返回已经存在的对象,从数据库或从缓存(如果对象尚不存在,则初始数据库查找显然是不可避免的,除非使用围绕 MySQL 的 REPLACE 构建的东西)。

编辑:由于我一直在研究使用配方,因此我重写了独特的对象配方,使其更加便携并更新为 0.5/0.6。

关于python - sqlalchemy 查找表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1964784/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com