Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2011 20:22:57

VasCraft
От:
Зарегистрирован: 2010-08-23
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

Sqlite3: update

Доброго времени суток. Возник вопрос касаемо обновления записей в БД. Допустим, имеется база данных base.db с таблицей results, атрибуты которой user, mark1, mark2, mark3. Имеется запись, где user = ‘user1’, mark1=mark2=mark3 = 0. Допустим, надо обновить mark1-3, но таким способом, чтобы его последняя цифра задавалась через какой-либо параметр i.

Допустим, можно сделать такой код:

i = 2
sel = cur.execute('update results set mark[i] = ? where user = ?', (50,'user1'))
Понятное дело, такой код не работает. Хотелось бы узнать, как решить такую дилемму?



Отредактировано (Май 4, 2011 20:24:18)

Офлайн

#2 Май 5, 2011 05:55:51

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

Sqlite3: update

VasCraft
Доброго времени суток. Возник вопрос касаемо обновления записей в БД. Допустим, имеется база данных base.db с таблицей results, атрибуты которой user, mark1, mark2, mark3. Имеется запись, где user = ‘user1’, mark1=mark2=mark3 = 0. Допустим, надо обновить mark1-3, но таким способом, чтобы его последняя цифра задавалась через какой-либо параметр i.

Допустим, можно сделать такой код:
i = 2
sel = cur.execute('update results set mark[i] = ? where user = ?', (50,'user1'))
Понятное дело, такой код не работает. Хотелось бы узнать, как решить такую дилемму?
Нормализовать схему данных, разбить эту таблицу на три:

user(id, прочие атрибуты…)
mark(id, прочие атрибуты…)
result(user_id пользователя, mark_id, value)

И тогда все будет легко:
i = 2
sel = cur.execute('update result set value = ? where user_id = ? and mark_id = ? ', (50,'user1', i))
PS: И кстати, то что стоит перед вами не дилемма, а проблема http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D0%BB%D0%B5%D0%BC%D0%BC%D0%B0

PPS: И да, я зануда :)



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

Отредактировано (Май 5, 2011 05:58:34)

Офлайн

#3 Май 5, 2011 10:29:06

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Sqlite3: update

cur.execute('update results set mark%d = ? where user = ?' % (1,), (50,'user1'))
> Нормализовать схему данных, разбить эту таблицу на три:
имхо, для данной задачи это не оптимально. “user(id, прочие атрибуты…)” , mark1-3 - это как раз те самые “прочие атрибуты…”

Офлайн

#4 Май 5, 2011 17:49:11

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

Sqlite3: update

o7412369815963
> Нормализовать схему данных, разбить эту таблицу на три:
имхо, для данной задачи это не оптимально. “user(id, прочие атрибуты…)” , mark1-3 - это как раз те самые “прочие атрибуты…”
имхо, для любой задачи - лучше дойти хотя-бы до третей нормальной формы. А денормализацию уже выполнять когда проблемы с производительностью



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

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version