我有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'))
我试过这个,但不允许这样做。
答案 0 :(得分:1)
如果表只是一个属性真的不同,你可以为两者创建一个构造函数,它也采用位置参数,例如:
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))