Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2016 05:12:26

Australicys
Зарегистрирован: 2014-05-07
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & MySQL

Форумчане, я запутался, помогите

Есть бд на локалхосте, вот класс, где коннекчусь

class SQL():
    def __init__(self):
        self.connection = pymysql.connect(host='127.0.0.1', user='root', passwd='1236', db='test')
        self.cursor = self.connection.cursor()
    def insert_lessons(self, chatid, mon, tue, wed, thu, fri, sat, sun):
        query = 'INSERT INTO lessons VALUES ({}, "{}", "{}", "{}", ' \
                '"{}", "{}", "{}", "{}")'.format(chatid, mon, tue, wed, thu, fri, sat, sun)
        self.cursor.execute(query)
        self.connection.commit()
    def search_all(self, table):
        query = 'SELECT * FROM "{}"'.format(table)
        self.cursor.execute(query)
        return self.cursor.fetchall()

Хочу положить туда какие-то данные, делаю так
sql = SQL()
print(sql.search_all('lessons'))
sql.insert_lesson(from_id, 'mon', 'tue', 'wed', 'thu', 'fri', 'sat', 'sun')

Если добавлять тот же query руками, через Sequel например, то все ок, а через питон он зависает просто после принта и молчит. В чем проблема? Может быть права записи? Направьте плиз

Офлайн

#2 Янв. 15, 2016 05:37:38

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python & MySQL

Australicys
используйте подстановку значений,а не лично формируйте строку с запросом. Тем самым убережете себя от атак. Например так:

query = 'INSERT INTO lessons VALUES (%s, %s, %s, %s, %s, %s, %s, %s)'
self.cursor.execute(query, (chatid, mon, tue, wed, thu, fri, sat, sun))



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Янв. 15, 2016 05:39:53

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python & MySQL

Если бы не хватало прав - возбудилось бы исключение соответствующее.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Янв. 15, 2016 09:54:36

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

Python & MySQL

Australicys
В чем проблема? Может быть права записи? Направьте плиз
Сделай всё без класса.



Офлайн

#5 Янв. 15, 2016 12:34:28

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

Python & MySQL

Покажи код целиком. В представленных кусках криминала не видно.



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

Офлайн

#6 Янв. 15, 2016 15:07:15

Australicys
Зарегистрирован: 2014-05-07
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & MySQL

PooH прав, проблема в другом. Показываю

В определенный момент у меня запускается функция, она скачивает расписание, я все это дело разрезаю и упаковываю в удобный вид. Получаю массив с элементами такого вида

Лекция
Сичинава Д.В.
Теория языка (рус)
502
09:00-10:20
Старая Басманная ул., д. 21/4
~~~~~~~~~~~~~
Лекция
Сичинава Д.В.
Теория языка (рус)
502
10:30-11:50
Старая Басманная ул., д. 21/4
~~~~~~~~~~~~~
Практическое занятие
Сичинава Д.В.
Теория языка (рус)
527
13:40-15:00
Старая Басманная ул., д. 21/4
~~~~~~~~~~~~~

Именно так. Для проверки, этот метод нормально сработал
sql.insert_lesson(1233213, '123123', '123213,', '1231234124', '31231232', '1232131', '1231231', '1231231')
А этот
sql.insert_lesson(from_id, lessons[0], lessons[1], lessons[2], lessons[3], lessons[4], lessons[5], lessons[6])
не выполняется. Проблема в объеме передаваемых данных?

Отредактировано Australicys (Янв. 15, 2016 15:07:52)

Офлайн

#7 Янв. 15, 2016 15:09:14

Australicys
Зарегистрирован: 2014-05-07
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & MySQL

JOHN_16
Спасибо за совет

py.user.next
Все ок без классов, проблема, очевидно в другом. Выше описал

Отредактировано Australicys (Янв. 15, 2016 20:36:34)

Офлайн

#8 Янв. 16, 2016 00:57:10

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Python & MySQL

Australicys
Проблема в объеме передаваемых данных?
думаю что нет. У вас же явно небольшой объем данных?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Янв. 16, 2016 02:45:52

Australicys
Зарегистрирован: 2014-05-07
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & MySQL

JOHN_16

элемент массива я уже написал выше. Таких 7. То есть строка бд состоит из id и 7ми элементов массива

Офлайн

#10 Янв. 16, 2016 04:13:07

Australicys
Зарегистрирован: 2014-05-07
Сообщения: 24
Репутация: +  0  -
Профиль   Отправить e-mail  

Python & MySQL

UPD:

Нашел где спотыкается.

Первый insert выполняется, а второй нет. Кодировка? Как поправить?

sql.insert_lesson(from_id, 'sdfwgwe', '123213,', '1231234124', '31231232', '1232131', '1231231', '1231231')
sql.insert_lesson(from_id, 'привет', '123213,', '1231234124', '31231232', '1232131', '1231231', '1231231')

UPDUPD:

Лечится добавлением charset и init_command в коннект
class SQL():
    def __init__(self):
        self.connection = pymysql.connect(host='127.0.0.1', user='root', passwd='1236', db='test',
                                          charset='utf8', init_command='SET NAMES UTF8')
        self.cursor = self.connection.cursor()

Отредактировано Australicys (Янв. 16, 2016 04:29:41)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version