Форум сайта python.su
Т.к. тут больше с питоном, то пример на питоне:
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("create table t(a text unique, b integer)")
cur.execute("insert into t(a, b) values (?,?)", ('a', 1))
# вторая строка
cur.execute("insert into t(a, b) values (?,?)", ('a', 2))
cur.execute("select * from t")
print cur.fetchall()
Офлайн
Это что ещё за “ignore”?
Ты указал, что a уникально. Т.е. в таблице не может содержаться две записи с одинаковыми a. Соответственно, при попытке добавить запись с не уникальным a, вызывается исключение.
Или ты хочешь странного, или опиши лучше, чего ты хочешь добиться.
P.S. Да, sqlite3 не любит много потоков. Лучше сделай очередь.
Отредактировано (Май 17, 2010 23:20:14)
Офлайн
Не касаясь потоков.
У тебя а - уникальный ключ. При записи с имеющимся ключом - возможны 2 варианта: обновить запись с таким ключом либо проигнорировать вставку.
В первом случае вместо INSERT пишем REPLACE.
Во втором:
try:
cur.execute("insert into t(a, b) values (?,?)", ('a', 2))
except sqlite3.IntegrityError:
pass
Отредактировано (Май 17, 2010 23:31:55)
Офлайн
dimabest*UPDATE
В первом случае вместо INSERT пишем REPLACE.
Офлайн
ZZZВроде вполне ясно описал что хочу вставлять в таблицу и не получать исключения
Или ты хочешь странного, или опиши лучше, чего ты хочешь добиться.
dimabestне подходит, я не знаю ещё до вставки уникальна она или нет.
В первом случае вместо INSERT пишем REPLACE.
dimabestвот-вот, это уже ближе но как? “inser ignore into” такой команды в sqlite нет.
либо проигнорировать вставку.
Офлайн
dimabestНе заметил сразу, тоже не подходит, т.к на самом деле я юзаю executemany, т.е. команда insert идёт из всего списка, которые передаётся в executemany, и в случаее попадись один повторный элемент, возникнет исключение, а предсказать судьбу остальных не представляется возможным.
Во втором:try:
cur.execute("insert into t(a, b) values (?,?)", ('a', 2))
except sqlite3.IntegrityError:
pass
Офлайн
alexx11Не получить исключения и добавить в таблицу? Или не добавить? Или записать последнее?
Вроде вполне ясно описал что хочу вставлять в таблицу и не получать исключения
Офлайн
Пробовал http://www.sqlite.org/lang_conflict.html ?
Офлайн
ZZZТут за посты не платят.
alexx11 написал:
Вроде вполне ясно описал что хочу вставлять в таблицу и не получать исключения
Не получить исключения и добавить в таблицу? Или не добавить? Или записать последнее?
Формулируй свои мысли точнее.
Я уже сказал, что писать в sqlite в несколько потоков нельзя – оно не для того сделано. Организуй прослойку с очередью запросов, чтобы писать в один поток и проблема решиться.
LexanderСпасибо огромное, и прям спасибо отдельно что люди умные ещё заходят на форумы.
Пробовал http://www.sqlite.org/lang_conflict.html ?
Офлайн
ZZZименно REPLACE
dimabest написал:
В первом случае вместо INSERT пишем REPLACE.
*UPDATE
alexx11А знать не надо. Если строки с таким ключом нет - она будет вставлена, если есть - обновлена новыми данными
dimabest написал:
В первом случае вместо INSERT пишем REPLACE.
не подходит, я не знаю ещё до вставки уникальна она или нет.
Офлайн