Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 6, 2015 00:47:14

nightman_vem
Зарегистрирован: 2015-04-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

Помогите, плиз.
Высушил мозг. Не выполняется код

def saveSMS(self, body):
        """
        Saving SMS to file
        """
        global insert
        try:
            db = MySQLdb.connect(host="127.0.0.1", user="********", passwd="***********", db="sms", charset='utf8')
            sms = codecs.open('%s%s_%s_%s' % (dwgconfig.income_path, body['number'], body['port'], body['timestamp']), 'w', 'utf-8')
            sms.write('Number: %s\n' % body['number'])
            sms.write('Port: %s\n' % body['port'])
            sms.write('Time: %s\n' % body['timestamp'])
            if body['encoding'] == 0:
                insert = """INSERT INTO recievesms (phone_num, gw_port, time_in, content) VALUES (%s,%s,%s,%s);""" % (
                (body['number']), (body['port']), (body['timestamp']), (body['content']))
                sms.write('Content: %s\n' % body['content'])
                sms.write('SQL_Script encod_0: %s\n' % insert)
            elif body['encoding'] == 1:
                insert = """INSERT INTO recievesms (phone_num, gw_port, time_in, content) VALUES (%s,%s,%s,%s);""" % (
                (body['number']), (body['port']), (body['timestamp']), (body['content'].decode('utf-16-be')))
                sms.write('Content: %s\n' % body['content'].decode('utf-16-be'))
                sms.write('SQL_Script encod_1: %s\n' % insert)
            sms.close()
            cursor = db.cursor()
            cursor.execute(insert)
            db.commit()
            gc.collect()
            logger('[DATA] Received SMS from number %s' % body['number'], False)
        except:
            logger('[DATA] Received unknown SMS', False)
В файл записывает строку с верными параметрами и кодом sql-запроса, но сам запрос не выполняется.
Вот, приходит смс, формируется файл с содержимым:

Number: +380*********
Port: 15
Time: 20150405235649
Content: Проверка с телефона 39
SQL_Script encod_1: INSERT INTO recievesms(phonenumsms, gwportsms, contentsms) values('+380*********', ‘15’, ‘20150405235649’, ‘Проверка с телефона 39’)

Отредактировано nightman_vem (Апрель 6, 2015 00:58:53)

Офлайн

#2 Апрель 6, 2015 06:31:55

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

Значит вываливается по исключению, которое благополучно съедается вашим try: except: . Убирайте эту конструкцию и смотрите что будет



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Отредактировано PooH (Апрель 6, 2015 06:32:44)

Офлайн

#3 Апрель 6, 2015 22:12:22

nightman_vem
Зарегистрирован: 2015-04-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

Спасибо огромное. )))) Форум является таблеткой для внимательности )))
Перепроверил весь код.
1. Скрипт работает в качестве службы, её нужно передёргивать после любого изменения.
2. В формировании запроса VALUES (%s,%s,%s,%s); переменные ОБЯЗАТЕЛЬНО экранировать'%s'
На данном этапе другая война.
Как получить значение ячеек одной строки таблицы в переменные
| ячейка 1 | ячейка 2 | ячейка 3 | ячейка 4 | в переменные
int 1
int 2
string 3
int 4

“SELECT * FROM table1 where tag = 0 ”
column: id, num, content, tag
До решения пока не дошел.
На самом деле это существующий, рабочий, модуль получения СМС для gsm-шлюзов Dinstar.
Я его просто допиливаю под свои нужды. От помощи не откажусь.

Отредактировано nightman_vem (Апрель 6, 2015 22:17:52)

Офлайн

#4 Апрель 6, 2015 23:40:25

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9867
Репутация: +  853  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

nightman_vem
Как получить значение ячеек одной строки таблицы в переменные
Выполни SELECT а потом рассматривай курсор как итератор.
list(cursor)



Офлайн

#5 Апрель 7, 2015 10:57:02

nightman_vem
Зарегистрирован: 2015-04-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

Я глубокий новичок в питоне. Чуть-чуть разъяснений не помешает или маленький пример )))

Офлайн

#6 Апрель 7, 2015 23:17:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9867
Репутация: +  853  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

cursor.execute('''select * from tab''')
t = list(cursor)



Офлайн

#7 Апрель 9, 2015 14:07:21

nightman_vem
Зарегистрирован: 2015-04-06
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Не отрабатывается запрос MySQL ...

Итого:
Код получился вот такой:

db = MySQLdb.connect(host="localhost", user="sms", passwd="********", db="sms", charset='utf8', init_command='SET NAMES UTF8')
cursor = db.cursor()
cursor.execute(sql_sms_out)
status_cnt = int(cursor.rowcount)
i = status_cnt
while i > 0:
    cursor = db.cursor()
    cursor.execute(sql_sms_out)
    row_data = (cursor.fetchone())
    phon_send = ((row_data[0]))
    port_send = (row_data[1])
    cont_sms_send = (row_data[2])
    time_sms_send = row_data[4]
    time_in_path = (time_sms_send.strftime("%d-%m-%Y-%H-%M-%S"))
    fname = ('%s%s_%s_%s' % (dwgconfig.send_path, phon_send, port_send, time_in_path))
    sms = codecs.open('%s' % ((fname)), 'w', 'utf-8')
    sms.write('%s\n' % phon_send)
    sms.write('%s\n' % port_send)
    sms.write('%s\n' % cont_sms_send)
    sms.close()
    sql_sms_out_replace = ("""UPDATE SendSMS SET `status_sms_send` = '1' WHERE time_send = '%s'""" % str(time_sms_send))
    cursor.execute(sql_sms_out_replace)
    db.commit()
    row_data = cursor.fetchone()
    i = i - 1
    gc.collect()
Также вариант подсказки с fetch нашел в посте http://python.su/forum/topic/1840/?page=1

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version