Форум сайта python.su
Помогите, плиз.
Высушил мозг. Не выполняется код
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)
Отредактировано nightman_vem (Апрель 6, 2015 00:58:53)
Офлайн
Значит вываливается по исключению, которое благополучно съедается вашим try: except: . Убирайте эту конструкцию и смотрите что будет
Отредактировано PooH (Апрель 6, 2015 06:32:44)
Офлайн
Спасибо огромное. )))) Форум является таблеткой для внимательности )))
Перепроверил весь код.
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)
Офлайн
nightman_vemВыполни SELECT а потом рассматривай курсор как итератор.
Как получить значение ячеек одной строки таблицы в переменные
list(cursor)
Офлайн
Я глубокий новичок в питоне. Чуть-чуть разъяснений не помешает или маленький пример )))
Офлайн
cursor.execute('''select * from tab''') t = list(cursor)
Офлайн
Итого:
Код получился вот такой:
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()
Офлайн