Python sqlite3 генерирует уникальный идентификатор

#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 добро пожаловать, отметьте ответ, если он был правильным.