Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 15, 2018 06:25:36

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

Здравствуйте.
Можно ли SQLite таблицу вида:

Фамилия | Имя | КолБал
Петров | Сергей | 2
Иванов | Максим | 1
Анютина | Марина | 3
Петров | Андрей | 3

обновить данными из списка

 [[Анютина, Марина , 2], [Иванов, Максим, 1], [Петров, Андрей, 1]]
,
чтобы получить значения КолБал как разность существующих в таблице и в списке чисел?
Фамилия | Имя | КолБал
Петров | Сергей | 2
Иванов | Максим | 0
Анютина | Марина | 1
Петров | Андрей | 2.


Офлайн

#2 Фев. 15, 2018 07:30:54

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

sqlite

MaratD
нифига не понятно



Офлайн

#3 Фев. 15, 2018 09:11:38

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

Имеется таблица, в которой необходимо изменить значения колонки КолБал (число). Имеется список с фамилиями, именами и числами. Обновить таблицу надо по соответствующим фамилиям и именам. Число в колонке КолБал должно получиться как разность. То есть, например, из списка берем Иванова Максима. Смотрим, если есть в таблице Иванов Максим, то в колонке КолБал меняем число 1 на 1-1=0. Если нет, то просто добавляем запись в таблицу.
Это возможно или нет?

Офлайн

#4 Фев. 15, 2018 10:27:30

gorodetskiykp
От:
Зарегистрирован: 2012-03-16
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

 SELECT c1, sum(c2) FROM 'Users' GROUP BY c1 ORDER BY c1;

Результат можно заинсертить в новую таблицу.



Офлайн

#5 Фев. 15, 2018 12:33:08

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

пробую обновить запись таблицы, вылетает ошибка:
con.execute('UPDATE OR ROLLBACK pers SET kol=? WHERE fam=? AND nam=?', (k, ff, nn))
sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.
ПОМОГИТЕ!!! что не так?

 k = (9.0,)
ff= ('Петров',)
nn = ('Андрей',)
con.execute('UPDATE OR ROLLBACK ostatok SET kol=? WHERE fam=? AND nam=?', (k, ff, nn))

Офлайн

#6 Фев. 15, 2018 12:47:27

gorodetskiykp
От:
Зарегистрирован: 2012-03-16
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

MaratD
пробую обновить запись таблицы, вылетает ошибка:con.execute('UPDATE OR ROLLBACK pers SET kol=? WHERE fam=? AND nam=?', (k, ff, nn))sqlite3.InterfaceError: Error binding parameter 0 - probably unsupported type.ПОМОГИТЕ!!! что не так?

Это же python-строка? Попробуй с помощью format.
 k = 9.0
ff= 'Петров'
nn = 'Андрей'
con.execute('UPDATE OR ROLLBACK ostatok SET kol={} WHERE fam={} AND nam={}'.format(k, ff, nn))



Офлайн

#7 Фев. 15, 2018 12:54:24

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

к - это число (float).
с одним параметром все работает (с числовым или строковым), а если добавляю больше уже вылетает ошибка.

Офлайн

#8 Фев. 15, 2018 13:08:38

gorodetskiykp
От:
Зарегистрирован: 2012-03-16
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

MaratD
к - это число (float).с одним параметром все работает (с числовым или строковым), а если добавляю больше уже вылетает ошибка.

так мое решение сработало или нет?



Офлайн

#9 Фев. 15, 2018 14:00:05

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

да, спасибо.
только дошло, взял у вас строки вместо кортежей.

Офлайн

#10 Фев. 16, 2018 08:01:05

MaratD
Зарегистрирован: 2016-01-25
Сообщения: 138
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite

Здравствуйте.
Возможно ли подключиться к базе SQLite не при запуске скрипта, а в определенный момент (например, при нажатии кнопки). При этом, чтобы это соединение было видно в любом месте модуля.
Сделал так, работает. Но кажется не так это делается. Подскажите как правильно делают.

 class Example(QWidget):
     conn = None
     def __init__(self):
        super().__init__()
    

 def TestView(self):
        Example.conn = sqlite3.connect('TEST.db')
        c = Example.bb.cursor()
        c.execute('SELECT * FROM test1')
        print(c.fetchall())

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version