Python MySQLdb上的SQL语法错误,首先使用execute()



我正在使用与Flask结合的ADMINLTE(或者想使用它(,但每次都会出现错误。

1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'groups G ON G.id = M.gid WHERE user = 'admin'' at line 1"
MySQLdb._exceptions.ProgrammingError: execute() first

这就是错误来自的代码

password = form['password']
cur = self.db.query("SELECT pass,firstname,lastname, G.name FROM users LEFT JOIN groupmembers M ON M.uid = id LEFT JOIN groups G ON G.id = M.gid WHERE user = %s", [username])
for row in cur.fetchall():
pwbytes = password.encode('utf-8')
saltbytes = row[0].encode('utf-8')
if bcrypt.hashpw(pwbytes, saltbytes) == saltbytes:
session['username'] = form['username']
session['flname'] = row[1] + " " + row[2]
session['group'] = row[3]
session["notificationtype"] = "success"
session["notification"] = "Logged in"
return None

那是来自self.dbquery 的查询

def query(self, sql, args=None):
try:
cursor = self.conn.cursor()
cursor.execute(sql,args)
except:
self.connect()
cursor = self.conn.cursor()
try:
cursor.execute(sql,args)
except MySQLdb.Error as e:
print(e)
return cursor

你知道语法有什么错吗?

Mysql不喜欢将groups作为表名,因此必须使用backticks

SELECT pass,firstname,lastname, G.name 
FROM users u 
LEFT JOIN groupmembers M ON M.uid = u.id 
LEFT JOIN `groups` G ON G.id = M.gid 
WHERE user = %s

最新更新