#python #sqlite
#python #sqlite
Вопрос:
Я пытаюсь добавить значения в «таблицу ожидающих приложений». Это то, что у меня есть до сих пор:
appdata = [(ID,UNIQUE_IDENTIFIER,(time.strftime("%d/%m/%Y"),self.amount_input.get(),self.why_input.get())]
self.c.execute('INSERT into Pending VALUES (?,?,?,?,?)', appdata)
self.conn.commit()
Мне нужно установить значение для ‘UNIQUE_IDENTIFIER’, которое является первичным ключом в базе данных sqlite.
Как я могу сгенерировать номер запроса для этого значения?
CREATE TABLE Pending (
ID STRING REFERENCES StaffTable (ID),
PendindID STRING PRIMARY KEY,
RequestDate STRING,
Amount TEXT,
Reason TEXT
);
Комментарии:
1. Не могли бы вы использовать столбец автоматического увеличения для этой цели?
2. Это было бы хорошо, я новичок в sqlite, и я не уверен, как это сделать правильно, хотя
3. Пожалуйста, опубликуйте структуру вашей таблицы.
4. Добавлено в исходное сообщение
Ответ №1:
два способа сделать это:
1-Первый
в python вы можете использовать uuid
пример модуля:
>>> import uuid
>>> str(uuid.uuid4()).replace('-','')
'5f202bf198e24242b6a11a569fd7f028'
примечание : небольшой шанс получить тот же str, поэтому перед сохранением проверьте, существует ли объект с тем же первичным ключом в таблице
этот метод uuid.uuid4()
каждый раз возвращает новый случайный
например:
>>> ID=str(uuid.uuid4()).replace('-','')
>>>cursor.execute("SELECT * FROM Pending WHERE PendindID = ?", (ID,))
>>>if len(data)==0:
#then save new object as there is no row with the same id
else:
#create new ID
2-секундный
в sqlite3
создайте составной первичный ключ в соответствии с sqlite doc
CREATE TABLE Pending (
column1,
column2,
column3,
PRIMARY KEY (column1, column2)
);
Затем убедитесь в уникальности throw unique(column1, column2)
Комментарии:
1. Как я могу сгенерировать новый идентификатор, а затем проверить, используется ли он уже?
2. спасибо, это большая помощь! Но, можете ли вы объяснить, что такое «данные». И, прав ли я, предполагая, что если len (данные) ==0
3. Если len(data) ==0, то поиск по базе данных не вернул идентификаторов, соответствующих сгенерированному идентификатору?
4. @MathewWright да, именно данные являются набором запросов, если их длина равна нулю, идентификаторы no совпадают с сгенерированным идентификатором
5. @MathewWright добро пожаловать, отметьте ответ, если он был правильным.