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 ...
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top