Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2020, 11:32   #11
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Сейчас у меня без ошибок распечатывается ваш запрос, несмотря на то, что там есть неэкранированные кавычки. Распечатайте свой запрос print(sql) и посмотрите, что получается.

В самом начале идет строка:
Код:
select o.gds, concat(o.first_name, , o.last_name)
Arkuz вне форума Ответить с цитированием
Старый 29.01.2020, 12:33   #12
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

Arkuz, Так, немного упростим код для восприятия , я закэранировал символы. Он отработал нормально, создал файлик эксель, но он не воспринимает условие на даты (o.cdate BETWEEN" + "'"+ str(d1) + "'" +" " + "AND" + " "+ "'" + str(d2) + "'), он создает документ в котором есть название столбцов, но ни одной строчки. Если убрать условие даты, он отрабатывает нормально и выдает все возможные строки. Может я неправильно написал условие?. В SQL оно выглядит так o.cdate between @d1 and @d2 (где d1 и d2 мы ранее забили с руки)
Код:
import pandas as pd
import win32com.client as wincl
from pandas import ExcelWriter
from pandas import ExcelFile
import subprocess
from tkinter.filedialog import askopenfilename
import pymysql.cursors
import csv                                                                               # Запись в файл
print('Выберите файл с данными от Heidi SQL')
file = askopenfilename()
f = open(file)

id = f.readline()
id1 = id[:-1]
passw = f.readline()
connection = pymysql.connect(host='',user=str(id1),password=str(passw),db='busorder',charset='utf8mb4')
print("SQL connect successfull")
print('Введите первый день отчетного периода (в формате гггг-мм-дд)')
d1 = input()
print('Введите первый день следующего периоа (в формате гггг-мм-дд)')
d2 = input()
try:
    with connection.cursor() as cursor:
        sql ="select o.gds, \
        concat(o.first_name, \" \", o.last_name) as \"ИФ\", \
        t.number, t.external_id, \
        concat(o.departure_city_name, \" - \", o.arrival_city_name) as \"Маршрут\", \
        o.cdate \
        from busorder.order_backoffice o \
        left join busorder.ticket t on t.order_id=o.id \
        left join buspricing.estimate es on es.id = t.estimate_id \
        left join busgateline.rm_paymentgate_object po on po.order_id = o.id \
        left join busboxplat.rm_paymentgate_object pob on pob.order_id = o.id \
        left join busorder.passenger p on p.order_id = o.id and p.id = t.passenger_id \
        where o.cdate BETWEEN\" + \"'\"+ str(d1) + \"'\" +\" \" + \"AND\" + \" \"+ \"'\" + str(d2) + \"' \
        and o.gds='[\"busmoscowbus\"]'" 
        
        df = pd.read_sql(sql,connection)
        writer = pd.ExcelWriter('C:\\Users\\evseev1\\Desktop\\Reestr.xlsx')
        df.to_excel(writer, ' Реестр')
finally:
    connection.close()
writer.save()
print('Downloading TUTU db success')

Последний раз редактировалось 1way2god; 29.01.2020 в 14:33.
1way2god вне форума Ответить с цитированием
Старый 29.01.2020, 12:39   #13
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Добавьте пробел после BETWEEN
Код:
where o.cdate BETWEEN \" + \"'\"+ str(d1) + \"'\" +\" \" + \"AND\" + \" \"+ \"'\" + str(d2) + \"' \
А то у вас получается строка "BETWEENstr(d1)", слово BETWEEN и значение str(d1) не разделены пробелом.
Arkuz вне форума Ответить с цитированием
Старый 29.01.2020, 12:41   #14
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,708
По умолчанию

Заставь дураков богу молиться...
Код:
where o.cdate BETWEEN\" + \"'\"+ str(d1) + \"'\" +\" \" + \"AND\" + \" \"+ \"'\" + str(d2) + \"' \
Не нужно тут экранировать, вы же тут строки складываете.
p51x вне форума Ответить с цитированием
Старый 29.01.2020, 13:07   #15
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

p51x, Спасибо огромное, все получилось, убрал экраны с условия! Я второй день вижу в глаза питон к сожалению, еще учиться и учиться)

Последний раз редактировалось 1way2god; 29.01.2020 в 13:10.
1way2god вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
необходимо разобраться в ошибке в VBA илья1992 Помощь студентам 5 14.04.2015 18:45
поомогите разобраться в ошибке shirko Общие вопросы C/C++ 7 28.03.2012 21:32
Помогите разобраться в ошибке nimbler Общие вопросы Delphi 9 27.06.2009 14:58
Помогите разобраться в ошибке! Doget Помощь студентам 6 09.02.2009 20:18