来自 python 代码的 MariaDB 查询
MariaDB query from python code
我正在编写一个 python 脚本,它连接到 MariaDB 服务器 (V 10.1.12) 并将某些查询的结果保存到文件中。
但是,发送以下查询时:
sql = 'SELECT * FROM Monitor_Run_Tracking WHERE Entry IN (SELECT MAX(Entry) ' \
'FROM Monitor_Run_Tracking WHERE Run in ({0}) ' \
"AND WhenEntered<'{1}' GROUP BY Run)".format( runstr, quality_date )
后跟 cursor.execute( sql )
,我得到以下错误:
File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 174, in
execute
File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py",
line 36, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server
version for the right syntax to use near ') AND
WhenEntered<'2020-01-01' GROUP BY Run)' at line 1")
有人可以向我解释错误是什么吗?
谢谢!
您没有关闭嵌套 select 周围的括号。应该是
SELECT * FROM Monitor_Run_Tracking WHERE Entry IN (
SELECT MAX(Entry)
FROM Monitor_Run_Tracking WHERE Run in ({0})
AND WhenEntered<'{1}')
GROUP BY Run
或
SELECT * FROM Monitor_Run_Tracking WHERE Entry IN (
SELECT MAX(Entry)
FROM Monitor_Run_Tracking WHERE Run in ({0})
AND WhenEntered<'{1}'
GROUP BY Run)
编辑:对于另一个问题,您正在按您没有selecting 的字段进行分组。查看 this question 寻求帮助。
我正在编写一个 python 脚本,它连接到 MariaDB 服务器 (V 10.1.12) 并将某些查询的结果保存到文件中。 但是,发送以下查询时:
sql = 'SELECT * FROM Monitor_Run_Tracking WHERE Entry IN (SELECT MAX(Entry) ' \
'FROM Monitor_Run_Tracking WHERE Run in ({0}) ' \
"AND WhenEntered<'{1}' GROUP BY Run)".format( runstr, quality_date )
后跟 cursor.execute( sql )
,我得到以下错误:
File "build/bdist.linux-x86_64/egg/MySQLdb/cursors.py", line 174, in execute
File "build/bdist.linux-x86_64/egg/MySQLdb/connections.py", line 36, in defaulterrorhandler _mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ') AND WhenEntered<'2020-01-01' GROUP BY Run)' at line 1")
有人可以向我解释错误是什么吗?
谢谢!
您没有关闭嵌套 select 周围的括号。应该是
SELECT * FROM Monitor_Run_Tracking WHERE Entry IN (
SELECT MAX(Entry)
FROM Monitor_Run_Tracking WHERE Run in ({0})
AND WhenEntered<'{1}')
GROUP BY Run
或
SELECT * FROM Monitor_Run_Tracking WHERE Entry IN (
SELECT MAX(Entry)
FROM Monitor_Run_Tracking WHERE Run in ({0})
AND WhenEntered<'{1}'
GROUP BY Run)
编辑:对于另一个问题,您正在按您没有selecting 的字段进行分组。查看 this question 寻求帮助。