如何在不输入列名的情况下引用列?

时间:2013-02-23 11:29:54

标签: python sqlalchemy

我有几个表应该插入数据的列。我不想再次重新键入列的名称,因为我已经在“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”。

基本上我只想构建一个函数,只要我已经指定了表的名称,就可以“使用”列索引来插入数据。有没有办法实现这个目标?

1 个答案:

答案 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')

作为旁注,由于所有实例都具有相同的密钥,因此反转这两个循环将获得更好的性能(您不需要每次都重新创建密钥数组)。