[英]SQLalchemy ORM add to session with dynamic column
我有2个表(不是数据库的真实设置)。
class TableMeaningEN(sqla_base):
__tablename__ = 'MeaningEN'
id = sqla.Column(sqla.Integer, primary_key=True)
meaning = sqla.Column(sqla.String, primary_key=True)
class TableReadingON(sqla_base):
__tablename__ = 'ReadingON'
id = sqla.Column(sqla.Integer, primary_key=True)
reading = sqla.Column(sqla.String, primary_key=True)
如您所见,两者都有列id
,但是TableMeaningEN
具有meaning
而TableReadingON
具有reading
。
通常(假设您已经有一个会话),您将添加以下内容:
session.add(TableMeaningEN(id=1, meaning='test'))
但是我想向表中动态添加条目,所以我有:
import tableclass as tc
for t_name in ['MeaningEN', 'ReadingON']:
session.add(getattr(tc, 'Table{}'.format(t_name))(id=1, ??='test'))
我该如何解决这个问题??
是在一个表meaning
,并在其他reading
?
columns = sqla.inspect(getattr(tc, 'Table{}'.format(overwrite))).columns.keys()
session.add(getattr(tc, 'Table{}'.format(t_name))(id=1, columns[1]='test'))
我试过了,但是那是不允许的。
如果表实际上只是一个属性而不同,则可以为两个表创建一个构造函数,该构造函数也接受位置参数,例如:
class TableMeaningEN(sqla_base):
def __init__(self, id, meaning):
self.id, self.meaning = id, meaning
# similar __init__ for the other class/table
# then use the following:
session.add(getattr(tc, 'Table{}'.format(t_name))(1, 'test'))
一种替代方法是,假设存在命名约定,则动态创建关键字参数:
import tableclass as tc
for t_name in ['MeaningEN', 'ReadingON']:
cls = getattr(tc, 'Table{}'.format(t_name))
fld_name = t_name.lower()[:-2]
kw = {'id': 1, fld_name: 'test'}
session.add(cls(**kw))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.