Mysql 从sql查询获取所有结果
我正在向MySQL服务器发送sql查询Mysql 从sql查询获取所有结果,mysql,sql,python-3.x,execute,Mysql,Sql,Python 3.x,Execute,我正在向MySQL服务器发送sql查询 if (self.database_connection.is_connected()): cursor = self.database_connection.cursor(prepared=True) sql_query = ''' SELECT e.ad, e.ad2, e.ad3, e.ad4, eve.ad5
if (self.database_connection.is_connected()):
cursor = self.database_connection.cursor(prepared=True)
sql_query = '''
SELECT
e.ad, e.ad2, e.ad3, e.ad4, eve.ad5
FROM
db.table2 e
JOIN
db.table eve
ON
e.ad1=eve.ad4
WHERE
e.ad in ('15965', '1444');
'''
cursor.execute(sql_query)
row = cursor.fetchall()
但它只返回元组中每个元素的第一条记录。
当我在Workbench中查询它时,它会返回所有结果——我的意思是,对于tuple Workbench中的第一个元素,它会返回2条记录,但python只返回第一条记录
工作台结果:
ad ad2 ad3 ad4 ad5
15965 14 1 2020-04-11 yes
15965 141 NULL NULL NULL
1444 41 NULL NULL no
Python代码结果:
print(row)
[('15965', '14', '1', '2020-04-11', 'yes'),
('1444', '41', NULL, NULL, 'no')]
我尝试使用fetchmany和executemany,但无法理解。您似乎想要聚合。它看起来像:
SELECT e.ad, MIN(e.ad2), MIN(e.ad3), MIN(e.ad4), MIN(eve.ad5)
FROM db.table2 t2 JOIN
db.table t
ON e.ad1 = eve.ad4
WHERE e.ad in ('15965', '1444')
GROUP BY e.ad;
查询中的列别名不一致。我想你知道如何解决这个问题。你似乎想要聚合。它看起来像:
SELECT e.ad, MIN(e.ad2), MIN(e.ad3), MIN(e.ad4), MIN(eve.ad5)
FROM db.table2 t2 JOIN
db.table t
ON e.ad1 = eve.ad4
WHERE e.ad in ('15965', '1444')
GROUP BY e.ad;
查询中的列别名不一致。我想你知道如何解决这个问题。问题是我的愚蠢,我在查询工作台生产表,python在查询开发表…问题是我的愚蠢,我在查询工作台生产表,python在查询开发表…请提供示例数据和所需结果。谢谢,我更新了问题。这看起来很可疑:
row=cursor.fetchall()
/print(row)
。您得到的不是一行,而是几行,因此我希望大致如下:rows=cursor.fetchall()
/对于行中的行:…
。这只是变量的名称-与此无关好的,抱歉。你能展示一下这两张表中涉及的行吗?然后,请更正您的查询。它无效,因为表别名t/t2与e/eve不匹配。请提供示例数据和所需结果。谢谢,我更新了问题。这看起来可疑:row=cursor.fetchall()
/print(row)
。您得到的不是一行,而是几行,因此我希望大致如下:rows=cursor.fetchall()
/对于行中的行:…
。这只是变量的名称-与此无关好的,抱歉。你能展示一下这两张表中涉及的行吗?然后,请更正您的查询。它是无效的,因为表别名t/t2与e/eve不匹配。我不明白为什么要使用MIN()函数?老实说,我和你的问题没有什么不同。我更新了表名。@jan。关键是groupby
(我刚刚添加的)。是的,我看到在将groupby添加到我的sql查询工作台后,返回的结果与python代码相同……我不明白为什么要使用MIN()函数?老实说,我和你的问题没有什么不同。我更新了表名。@jan。关键是groupby
(我刚刚添加的)。是的,我看到在将groupby添加到我的sql查询工作台后,显然返回了与python代码相同的结果……哈哈,这就解释了。我很高兴你找到了原因并发布了这个答案。你应该接受它(在这个答案旁边打勾),这样未来的读者会很快明白这一切是怎么回事。@ThorstenKettner我会的,但是:你可以在两天内接受你自己的答案,这就解释了。我很高兴你找到了原因并发布了这个答案。你应该接受它(在这个答案旁边打勾),这样将来的读者会很快明白这一切是怎么回事。@ThorstenKettner我当然会的,但是:你可以在两天内接受你自己的答案