Найти - Пользователи
Полная версия: Не отрабатывается запрос MySQL ...
Начало » Базы данных » Не отрабатывается запрос MySQL ...
1
nightman_vem
Помогите, плиз.
Высушил мозг. Не выполняется код
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’)
PooH
Значит вываливается по исключению, которое благополучно съедается вашим try: except: . Убирайте эту конструкцию и смотрите что будет
nightman_vem
Спасибо огромное. )))) Форум является таблеткой для внимательности )))
Перепроверил весь код.
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.
Я его просто допиливаю под свои нужды. От помощи не откажусь.
py.user.next
nightman_vem
Как получить значение ячеек одной строки таблицы в переменные
Выполни SELECT а потом рассматривай курсор как итератор.
list(cursor)
nightman_vem
Я глубокий новичок в питоне. Чуть-чуть разъяснений не помешает или маленький пример )))
py.user.next
cursor.execute('''select * from tab''')
t = list(cursor)
nightman_vem
Итого:
Код получился вот такой:
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB