我试图创建一个简单的函数来呈现包含(dest_column,src_expression)对的dict。在
特别是,我希望界面类似于:
insert_into(table_obj_a, tbl_object_b, dict(
col_c = 'col_f',
col_a = 'col_g',
col_q = 'col_r + 5',
col_r = tbl_object_b.col_q,
col_m = 'rand()',
))
在尝试实现这一点时,我注意到.from_select功能有一些特殊的行为,即传递给from_select的列的顺序似乎被忽略了。在
这就是我所经历的:
u@host:~/src/sa_bug$ python bug.py
['aaaa', 'aardvark', 'bbbb', 'dddd', 'eeee', 'ffff']
['aaaa', 'aardvark', 'bbbb', 'dddd', 'eeee', 'ffff']
SELECT aaaa, aardvark, bbbb, dddd, eeee, ffff
FROM table_b
INSERT INTO table_a (aaaa, bbbb, dddd, eeee, ffff, aardvark) SELECT aaaa, aardvark, bbbb, dddd, eeee, ffff
FROM table_b
u@host:~/src/sa_bug$ python bug.py
['aaaa', 'aardvark', 'bbbb', 'dddd', 'eeee', 'ffff']
['aaaa', 'aardvark', 'bbbb', 'dddd', 'eeee', 'ffff']
SELECT aaaa, aardvark, bbbb, dddd, eeee, ffff
FROM table_b
INSERT INTO table_a (aaaa, aardvark, bbbb, dddd, eeee, ffff) SELECT aaaa, aardvark, bbbb, dddd, eeee, ffff
FROM table_b
如您所见,INSERT INTO语句中列名的顺序与SELECT语句中表达式的顺序不匹配。在
我是否误解了.from峎select()的预期用途?在
问题是当您像这样定义
into_table
时:cols列表未排序,因此对于该列表:
^{pr2}$INSERT SQL是:
在函数内部,您使用
sorted()
对column_dict
进行排序,因此还必须对cols
列表进行排序。只需尝试在您的cols
定义之后添加cols.sort()
。在之后,INSERT SQL应该是:
正如zzzeek提到的,这是SQLAlchemy<;0.8.4中的一个bug。在
http://www.sqlalchemy.org/trac/ticket/2895
相关问题 更多 >
编程相关推荐