Уведомления

Группа в Telegram: @pythonsu

#1 Март 22, 2011 19:06:57

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3 Python3 NULL и None

Здравствуйте.
Есть БД с табличкой

CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
fio TEXT NOT NULL,
room INTEGER,
"login" TEXT UNIQUE,
"psw" TEXT NOT NULL,
commentary TEXT DEFAULT NULL
)
Данные в табличке:
INSERT INTO "users " VALUES ("1","Иванова Ольга Сергеевна",2,"ivos","202cb962ac59075b964b07152d234b70",null);
INSERT INTO "users " VALUES ("2","Петрова Ольга Александровна",3,"peoa","202cb962ac59075b964b07152d234b70",null);
INSERT INTO "users " VALUES ("3","Смирнова Светлана Сергеевна",NULL,"smss","202cb962ac59075b964b07152d234b70",null);
Я выполняю примерно такой код
    conn = sqlite3.connect('test.sqlite',detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
c = conn.cursor()
c.execute('select id, room from users where room is NULL')
tmp=''

for row in c:
tmp = '/cgi?id=%s&room=%s' % (row[0], row[1])
id = row[0]
room = row[1]

#... Далее я принимаю эти параметры через bottle
id= request.GET.get('id')
room = request.GET.get('room')

# и делаю

c.execute('update users set room=? where id=?', (room,id,))
conn.commit()
conn.close()
1. В результате в столбце room я вижу None, хотя тип у него Integer - как от этого уйти (пусть хотя бы ошибкой вываливается)
2. Или нужно всегда делать что-то подобное: если room = ‘None’? то переделать room из типа “строка” в тип “None”?

Помогите пожалуйста.



Офлайн

#2 Март 22, 2011 20:10:46

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3 Python3 NULL и None

c.execute('select id, CASE WHEN room IS NULL THEN -1 ELSE room END from users where room is NULL')



Офлайн

#3 Март 23, 2011 06:39:32

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3 Python3 NULL и None

А по-другому никак? Если в таблице 10 столбцов, и для каждого CASE писать - вообще не сахар… Может проще есть?



Офлайн

#4 Март 23, 2011 11:50:21

Studentik
От:
Зарегистрирован: 2009-12-26
Сообщения: 99
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3 Python3 NULL и None

UPDATE your_table SET your_fieild = -1 WHERE your_field IS NULL ?

Хотя больше это похоже на проблему форматирования пустых значений - смотрите на параметры форматирования тех компонент, которыми отображаете табличку.



Офлайн

#5 Март 26, 2011 08:25:15

zloymih
От:
Зарегистрирован: 2011-03-01
Сообщения: 36
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite3 Python3 NULL и None

Все оказалось просто:

conn = sqlite3.connect('test.sqlite',detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
c = conn.cursor()
c.execute('select id, room from users where room is NULL')
tmp=''

for row in c:
tmp = '/cgi?id=%s&room=%s' % (row[0], row[1])
id = row[0]
room = row[1]
#...
# Далее я принимаю эти параметры через bottle
id= request.GET.get('id')
room = request.GET.get('room')

# и делаю
if room == 'None'
room = None

c.execute('update users set room=? where id=?', (room,id,))
conn.commit()
conn.close()
и тогда в БД записываетя NULL



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version