Найти - Пользователи
Полная версия: SQlite [проверка на наличие]
Начало » Базы данных » SQlite [проверка на наличие]
1
diam123
Добрый день, уважаемые, не поделитесть ли секретом, кто как проверяет БД на наличие дубликатов, просто проблема в том, что есть таблица в базе, в таблице мне нужно, чтобы поиск шел по определнной колонке, и в БД записывалось значение только в том случае, если если оно там отсутствует,немного подробнее на http://sql.ru/forum/actualthread.aspx?tid=635371

В заумных решениях и извратах нету необходимости, пишется для собственных нужд :)
diam123
Все, решил так :
link='''"google.com"'''
ck_val=(c.execute("select count() from URLS where URL="+link)).fetchone()[0]
if str(ck_val)=="(0,)":c.execute("insert into URLS (URL) values ("+link+")")
diam123
lorien
Как вариант: ставите уникальный индекс на колонку, далее пытаетесь записать данные, если ловите exception, то значит уже такие данные есть.

Ваш код лучше записать так:
link = 'google.com'
cursor.execute("SELECT COUNT() FROM URLS WHERE URL = %s", [link])
count = cursor.fetchone()[0]
if not count:
cursor.execute("INSERT INTO URLS (URL) VALUES (%s)", [link])
Спасибо за помощь :)
А можно поподробнее, как поставить уникальный индекс ?
shiza
насчет уникального индекса
1. такой способ ИМХО более правильный, чем делать count() (а count без индекса - так вообще тормоз)
2. вот как это все примерно выглядит в коде:
#encoding: UTF-8
import sqlite3

con = sqlite3.connect('db.db')
cur = con.cursor()
cur.execute(""" CREATE TABLE tbl1 ( [word] VARCHAR(255) )""") #создаем таблицу с полем
cur.execute(""" CREATE UNIQUE INDEX [word] ON [tbl1] ([word])""") #делаем уникальный индекс


cur.execute(""" INSERT INTO tbl1 (word) values ("blah-blah")""") #делаем первую вставку

try:
cur.execute(""" INSERT INTO tbl1 (word) values ("blah-blah")""") #делаем вторую вставку
except sqlite3.IntegrityError, er: #словили исключение по причине неуникального индекса
print er
реакция на неудавшуюся вставку у SQLITE может быть разной ( не обязательно exception). Подробнее см. здесь:
http://www.sqlite.org/lang_insert.html
balu
diam123
ck_val=(c.execute(“select count() from URLS where URL=”+link)).fetchone()
При проверке на уникальность - это плохой тон. Хороший - на уровне базы.
diam123
Всем спасибо за помощь, с индексами пока попозже буду разбираться, сейчас занят, пока оставлю как есть
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