Форматирование в многострочном выражении pymysql

Следующее получает список названий компаний из одного столбца в базе данных, а затем итеративно использует 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, для правильного синтаксиса для использования рядом с «Здоровье (Канада)) как 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].


person Sam P    schedule 04.07.2014    source источник
comment
пожалуйста удалите ; в конце храма ул.   -  person sundar nataraj    schedule 04.07.2014
comment
и «это» является ключевым словом. не используй их   -  person sundar nataraj    schedule 04.07.2014
comment
можете ли вы показать свой образец данных таблицы возможностей   -  person sundar nataraj    schedule 04.07.2014
comment
@sundarnatarajСундар отредактировано   -  person Sam P    schedule 04.07.2014
comment
ответ решил проблему   -  person sundar nataraj    schedule 04.07.2014


Ответы (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)
person sundar nataraj    schedule 04.07.2014