0

我有几个表,其中包含许多应该插入数据的列。我不想再次重新输入列的名称,因为我已经在“SQLAlchemy 类定义”中输入了它们。

从发布的其他问题中,我看到您可以使用下面的代码获取列的名称。

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”列和默认设置为“现在”的日期获取数据。“实例”中的所有其他列都没有获得任何数据,而我希望在列中找到“texttoinsert”。

基本上,只要我指定了表的名称,我只想构建一个“可能使用”列索引来插入数据的函数。有没有办法做到这一点?

4

1 回答 1

1

for 循环是替换instance.__table__.columns.keys()数组中的值,而不是设置相应的属性 on instance。这应该可以解决问题:

for instance in SESSION.query(SampleClass).filter(SampleClass.id == 2): 
  for colname in instance.__table__.columns.keys():
    setattr(instance, colname, 'text_to_insert')

附带说明一下,由于您的所有实例都具有相同的键,因此反转两个循环会带来更好的性能(您不需要每次都重新创建键数组)。

于 2013-02-23T14:04:20.217 回答