我有几个表应该插入数据的列。我不想再次重新键入列的名称,因为我已经在“SQLAlchemy Class Defination”中输入了它们。
从发布的其他问题中,我看到您可以使用以下代码获取列的名称。
for c in datatable.__table__.columns.keys():
print(c)
这将给出列名。但是,我想要的是将数据插入列而不仅仅是读取列名。以下是我尝试过的内容。
for_counter = 0
for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2):
instance.__table__.columns.keys()[(for_counter)] = "texttoinsert"
for_counter += 1
我以为我可以用这个“索引”列但是当代码运行并且我检查数据库时,只有自动增量“ID”列和设置为默认为“now”的日期获取数据。 “实例”中的所有其他列都没有获得任何数据,而我希望在列中找到“texttoinsert”。
基本上我只想构建一个函数,只要我已经指定了表的名称,就可以“使用”列索引来插入数据。有没有办法实现这个目标?
答案 0 :(得分:1)
for循环正在替换instance.__table__.columns.keys()
数组中的值,而不是在instance
上设置相应的属性。这应该可以解决问题:
for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2):
for colname in instance.__table__.columns.keys():
setattr(instance, colname, 'text_to_insert')
作为旁注,由于所有实例都具有相同的密钥,因此反转这两个循环将获得更好的性能(您不需要每次都重新创建密钥数组)。