【问题标题】:Formatting in pymysql multiline statement在 pymysql 多行语句中格式化
【发布时间】:2014-08-25 15:58:42
【问题描述】:

以下内容从数据库中的一个列中获取公司名称列表,然后迭代地使用MATCH AGAINST 将它们与另一列进行匹配。

代码是:

cur = conn.cursor()
cur.execute("SELECT DISTINCT company FROM opportunities;")
o_companies = cur.fetchall()

results = []
for n in o_companies:
    entry = n[0]
    cur.execute( """
            SELECT DISTINCT lead_id, leads.created_date, leads.company_name,
            opp_id, opportunities.created_date, opportunities.company,
            DATEDIFF(
                    STR_TO_DATE(opportunities.created_date,'%d/%m/%Y'),
                    STR_TO_DATE(leads.created_date,'%d/%m/%Y')
                    ) as difference,
            MATCH(company) AGAINST ({0}) as match_rating
            FROM leads, opportunities WHERE MATCH(company) AGAINST({0}) > 0
            ORDER BY difference, match_rating;
            """.format(entry)
            )
    matches = cur.fetchall()
    for match in matches:
        print(match)
        results.append(match)

有两个问题:

首先是它不起作用,我得到的错误消息是:

pymysql.err.ProgrammingError: (1064, "你的 SQL 有错误 句法;检查与您的 MySQL 服务器版本相对应的手册 在 'Health (Canada)) 附近使用正确的语法 match_rating\n\t\t 来自潜在客户,机会在哪里匹配' 第 7 行")

第二个是我所有的换行符和制表符都在显示,我原以为这些会被自动忽略。

是SQL语句有问题还是格式有问题?

编辑:

下面是第一个 SQL 语句返回的元组示例:

('Cuttime.fm',) ('Renault Nissan',) ('Scout Marketing',) ('Beechcraft',) ('mobily',) ('Oliver Wyman',) ('MASTHEAD MARKETING',) ('FSA',) ('Only-apartments',) ('buchan',) ('Ralphs McIntosh',) ('TCMPi
- The Corporate Marketplace, Inc.',) ('University of Maryland, College Park',) ('Burson-Marsteller Guatemala',) ('Randstad Tech',) ('Gulf States Financial Services',) ('Socialyte',) ('The Social Shack',) ('Consumerchoices',) ('London Underground',)

正在使用n[0] 访问它们的值。

【问题讨论】:

  • 请删除;在tement st结束时
  • 'this' 是关键字。不要使用它们
  • 能否展示您的机会表数据样本
  • @sundarnatarajСундар 已编辑
  • 答案是否解决了问题

标签: python sql database string pymysql


【解决方案1】:

您忘记在查询AGAINST ('{0}') 中提供引号

要测试,请打印查询并在数据库中测试语句,以便您可以轻松debug

声明必须是

 """ SELECT DISTINCT lead_id, leads.created_date, leads.company_name,
            opp_id, opportunities.created_date, opportunities.company,
            DATEDIFF(
                    STR_TO_DATE(opportunities.created_date,'%d/%m/%Y'),
                    STR_TO_DATE(leads.created_date,'%d/%m/%Y')
                    ) as difference,
            MATCH(company) AGAINST ('{0}') as match_rating
            FROM leads, opportunities WHERE MATCH(company) AGAINST('{0}') > 0
            ORDER BY difference, match_rating
            """.format(a)

【讨论】:

    猜你喜欢
    • 2020-09-17
    • 2019-09-01
    • 2015-05-31
    • 2012-05-27
    • 1970-01-01
    • 1970-01-01
    • 2015-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多