Найти - Пользователи
Полная версия: Python & MySQL
Начало » Python для новичков » Python & MySQL
1
Australicys
Форумчане, я запутался, помогите

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

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 например, то все ок, а через питон он зависает просто после принта и молчит. В чем проблема? Может быть права записи? Направьте плиз
JOHN_16
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))
JOHN_16
Если бы не хватало прав - возбудилось бы исключение соответствующее.
py.user.next
Australicys
В чем проблема? Может быть права записи? Направьте плиз
Сделай всё без класса.
PooH
Покажи код целиком. В представленных кусках криминала не видно.
Australicys
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
JOHN_16
Спасибо за совет

py.user.next
Все ок без классов, проблема, очевидно в другом. Выше описал
JOHN_16
Australicys
Проблема в объеме передаваемых данных?
думаю что нет. У вас же явно небольшой объем данных?
Australicys
JOHN_16

элемент массива я уже написал выше. Таких 7. То есть строка бд состоит из id и 7ми элементов массива
Australicys
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()
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