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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2020, 15:12   #1
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию Помогите разобраться в ошибке

Есть два кода:
Они вызывают SQL запрос и создают эксель файл с данными на рабочем столе, они различаются только текстом запроса SQL.
1) Первый код отрабатывает без ошибок.
2) Второй код ругается на строчку, которая практически идентичная первому коду:
#
and o.cdate between" + "'"+ str(d1) + "'" +" " + "AND" + " "+ "'" + str(d2) + "'"
unsupported operand type(s) for -: 'str' and 'str'
Код:
mport 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='favia',charset='utf8mb4')
print("SQL connect successfull")
print('Введите первый день отчетного периода (в формате гггг-мм-дд)')
d1 = input()
print('Введите первый день следующего периоа (в формате гггг-мм-дд)')
d2 = input()
try:
    with connection.cursor() as cursor:
        sql ="select t.operable_number,t.operation_date,t.order_id,(t.base_fare) as 'Тариф',\
        (t.base_taxes) as 'Таксы',\
        (t.base_penalty) as 'Штрафы',\
        (t.total_commission) as 'Вознаграждение' \
        from favia.rm_fprice_report_iata_ticket t \
        WHERE t.hidden=0\
        and t.operation_date BETWEEN" + "'"+ str(d1) + "'" +" " + "AND" + " "+ "'" + str(d2) + "'" 
        
        df = pd.read_sql(sql,connection)
        writer = pd.ExcelWriter('C:\\Users\\username1\\Desktop\\filename.xlsx')
        df.to_excel(writer, ' Наш реестр')
finally:
    connection.close()
writer.save()
print('Downloading TUTU db success')
Код:
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 'Маршрут', \
        'issue' as 'Операция', \
        o.state, \
        o.cdate, \
        o.external_id, \
        o.external_order_id, \
        es.price as 'Цена билетов', \
        es.tariff+ es.partner_markup as 'Тариф партнера', \
        es.tutu_markup+ es.technical_markup-es.markup_discount as 'с/с', \
        ifnull(po.engine_payment_id,pob.engine_payment_id), \
        o.id, \
        0 as 'Платное обучение', \
        t.status as 'Тип', \
        es.price_original  as'Цена билетов (BYN), \
        o.departure_date as 'Дата отправления', \
        concat(p.first_name, " ", p.middle_name, " ", p.last_name) as 'ИФ пассажира' \
        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 and o.gds = '['busbeltranscom']' \
        and o.state like '%iss%' \
        and t.status not in ('canceled' ,'waiting','repealed', 'booked') \
        and o.cdate between" + "'"+ str(d1) + "'" +" " + "AND" + " "+ "'" + str(d2) + "'"        
        df = pd.read_sql(sql,connection)
        writer = pd.ExcelWriter('C:\\Users\\username1\\Desktop\\filename.xlsx')
        df.to_excel(writer, ' Наш реестр')
        
        
finally:
    connection.close()
writer.save()
print('Downloading TUTU db success')

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

Базу в студию.
Arkuz вне форума Ответить с цитированием
Старый 28.01.2020, 15:45   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Arkuz, зачем она вам?

1way2god, " - спец. символ, нужно экранировать, а то у вас разность строк получается.
p51x вне форума Ответить с цитированием
Старый 28.01.2020, 15:59   #4
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Arkuz, зачем она вам?
IDE что-то ничего не подсветила. Хотел базу, чтобы запустить.

Я так полагаю, что надо здесь
Код:
concat(o.departure_city_name, " - ", o.arrival_city_name) as 'Маршрут', \
поправить на
Код:
concat(o.departure_city_name, \" - \", o.arrival_city_name) as 'Маршрут', \
Arkuz вне форума Ответить с цитированием
Старый 28.01.2020, 16:11   #5
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Arkuz Посмотреть сообщение
IDE что-то ничего не подсветила. Хотел базу, чтобы запустить.

Я так полагаю, что надо здесь
Код:
concat(o.departure_city_name, " - ", o.arrival_city_name) as 'Маршрут', \
поправить на
Код:
concat(o.departure_city_name, \" - \", o.arrival_city_name) as 'Маршрут', \
Базу к сожалению дать не могу. Он не ругается на синтаксис, успешно запускает базу. Но! После того как я ввожу число в формате 2020-01-20 и 2020-01-21(Это переменная d1 и d2). Он ругается, почему ты пытаешь выполнить действие - между переменными типа str. Хотя в аналогичном коде, при аналогичном вводе все хорошо.
P.S. Да в строчке с concat я поправил, спасибо

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

Покажите ошибку, которая появляется в процессе.
Arkuz вне форума Ответить с цитированием
Старый 28.01.2020, 17:24   #7
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

Arkuz,
Изображения
Тип файла: png Ошибка python.png (13.5 Кб, 2 просмотров)
1way2god вне форума Ответить с цитированием
Старый 28.01.2020, 18:02   #8
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

У меня такая же ошибка.
Код:
Traceback (most recent call last):
  File "D:/GitHub/test111/sdgsdsg.py", line 31, in <module>
    and o.cdate between" + "'" + str(d1) + "'" + " " + "AND" + " " + "'" + str(d2) + "'"
TypeError: unsupported operand type(s) for -: 'str' and 'str'
Ругается на эту строку:
Код:
concat(o.departure_city_name, " - ", o.arrival_city_name) as 'Маршрут', \
Выложите еще раз полный код с последними изменениями.
Arkuz вне форума Ответить с цитированием
Старый 29.01.2020, 10:19   #9
1way2god
Пользователь
 
Регистрация: 28.01.2020
Сообщений: 13
По умолчанию

Arkuz,
Эта строчка не важна, я ее удалю, если будет ругаться на любую стоку, кроме
этой: o.cdate between" + "'" + str(d1) + "'" + " " + "AND" + " " + "'" + str(d2) + "'", просто удаляйте.
Вот еще раз кож без этой строки
Код:
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, \
        'issue' as 'Операция', \
        o.state, \
        o.cdate, \
        o.external_id, \
        o.external_order_id, \
        es.price as 'Цена билетов', \
        es.tariff+ es.partner_markup as 'Тариф партнера', \
        es.tutu_markup+ es.technical_markup-es.markup_discount as 'с/с', \
        ifnull(po.engine_payment_id,pob.engine_payment_id), \
        o.id, \
        0 as 'Платное обучение', \
        t.status as 'Тип', \
        es.price_original  as'Цена билетов (BYN), \
        o.departure_date as 'Дата отправления', \
        concat(p.first_name, " ", p.middle_name, " ", p.last_name) as 'ИФ пассажира' \
        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.gds = '['busbeltranscom']' \
        and o.state like '%iss%' \
        and t.status not in ('canceled' ,'waiting','repealed', 'booked') \
        and o.cdate between" + "'"+ str(d1) + "'" +" " + "AND" + " "+ "'" + str(d2) + "'"
        df = pd.read_sql(sql,connection)
        writer = pd.ExcelWriter('C:\\Users\\username1\\Desktop\\filename.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, 10:31   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от 1way2god Посмотреть сообщение
Меня просто очень смущает, что в почти одинаковых строчках, в одной нет ошибки, а в другой есть(два кода в начале темы), заранее спасибо
А вы перестаньте смущаться и заэкранируйте все спец. символы.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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