【问题标题】:Query not correct; however, works in MySQL [closed]查询不正确;但是,适用于 MySQL [关闭]
【发布时间】:2020-08-18 07:52:37
【问题描述】:

我正在尝试执行一个查询,该查询选择属于用户朋友组的用户名、您关注的人以及用户是 groupCreator 的组中的用户名。然后,我试图计算每个用户在所有帖子中的总反应,这些帖子是上面所选用户名的一部分,用于分析。我知道这些查询看起来很糟糕,抱歉!

我的代码给了我这个错误:

pymysql.err.ProgrammingError: (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 'Person JOIN 
Photo ON (Person.username = Photo.poster) JOIN ReactTo USING (pID)WH' at line 1")

我真的不明白为什么当它在 MySQL 硬编码中工作时会出现此错误。这是我的代码。感谢您的帮助。

def run_sql_many(query, data):
    cursor = conn.cursor()
    cursor.execute(query, data)
    data = cursor.fetchall()
    cursor.close()
    return data
user = session['username']
qAllLikes = 'SELECT firstName, lastName, COUNT(emoji) AS num_reactions' \
            'FROM Person JOIN Photo ON (Person.username = Photo.poster) JOIN ReactTo USING (pID)' \
            'WHERE Person.username IN (' \
            'SELECT DISTINCT username ' \
            'FROM (SELECT username ' \
            'FROM BelongTo ' \
            'WHERE groupName IN (' \
            'SELECT groupName' \
            'FROM BelongTo' \
            'WHERE username = %s)' \
            'OR username IN (' \
            'SELECT username' \
            'FROM BelongTo' \
            'WHERE groupCreator = %s)' \
            ') AS groupUsers' \
            'UNION' \
            '(SELECT username' \
            'FROM Follow JOIN Person ON (Follow.followee = Person.username)' \
            'WHERE follower = %s AND followStatus = 1))' \
            'GROUP BY firstName, lastName'
AllLikes = run_sql_many(qAllLikes, (user, user, user))

return render_template('home.html', username=user, posts=data, postAnalytics=AllLikes)

【问题讨论】:

  • 在将字符串分成几行的地方需要在单词之间留有空格。你最好使用'''multi-line string'''
  • num_reactionsFROM,以及其他任何地方

标签: mysql python-3.x flask pymysql


【解决方案1】:

缺少一些空格:

qAllLikes = 'SELECT firstName, lastName, COUNT(emoji) AS num_reactions' \
            'FROM Person JOIN Photo ON (Person.username = Photo.poster) ...'

其实是:

qAllLikes = 'SELECT firstName, lastName, COUNT(emoji) AS num_reactionsFROM  Person JOIN Photo ON (Person.username = Photo.poster) ...'

所以你得到num_reactionsFROM而不是num_reactions FROM

【讨论】:

  • 啊,我明白了。它也有效,所以谢谢!我假设 Flask 不允许空格,而 SQL 允许?
猜你喜欢
  • 1970-01-01
  • 2020-08-23
  • 2021-02-23
  • 1970-01-01
  • 2020-08-21
  • 2021-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多