强制mysqldb dict Cursor返回带有表名称的所有列名
-
26-10-2019 - |
题
SELECT * FROM a, b WHERE ...
MySQL允许在查询结果中重复列名。因此,在终端中,没有使用上述查询的列名是前缀。
但是,我正在与Dictcurs一起在Python中使用MySQLDB。结果是列名是键的字典列表。有时,dict光标会自动将列名称带有表名称。据我所知,它对两个模棱两可的列名称中的第二个来做到这一点,但前提是第二个值是唯一的。无论如何,我想强迫光标将所有键都带有表名。
来自 mysqldb文档 在fetch.row()函数上...
第二个参数(How)告诉它应该如何表示行。默认情况下,它为零,意味着,作为元组返回。 How = 1表示,将其返回为字典,键是列名称,或表格。 How = 2的含义与How = 1相同,除了密钥始终为table.column;这是与旧的MySQLDB模块兼容。
因此,这似乎是可行的,但是我没有直接使用fetch.row()函数...所以问题是, 我如何使mySQLDB dict Cursor始终使用= 2时= 2的速度?
解决方案
我不是使用的忠实拥护者 *
在查询中。列出您的列并根据需要分配自己的别名。如您所见,我也不是隐式连接的粉丝。
SELECT a.col1 AS acol1,
a.col2 AS acol2,
b.col1 AS bcol1,
b.col2 AS bcol2
FROM a
INNER JOIN b
ON ...
WHERE...
其他提示
给定明确列举表和字段的dict(或其他数据结构),构造SQL并不难:
import itertools as it
fields={'a':('col1','col2'),'b':('col1','col3')}
fields_sql=', '.join("{t}.{f} as '{t}.{f}'".format(f=f,t=t)
for t in fields for f in fields[t])
sql='''SELECT {f}
FROM a
JOIN b ON ...
WHERE ...'''.format(f=fields_sql)
print(sql)
产量
SELECT a.col1 as 'a.col1', a.col2 as 'a.col2', b.col1 as 'b.col1', b.col3 as 'b.col3'
FROM a
JOIN b ON ...
WHERE ...
不隶属于 StackOverflow