2015-05-06 6 views
0

Я пытаюсь добавить строку (сообщение, отправленную пользователем) в таблицу SQLite (сообщения). Мне нужно добавить новое сообщение с меткой времени, являющейся текущим временем и датой, а затем мне нужно вернуть идентификатор для этого нового сообщения.Вставка строки в таблицу SQLite

Мой код до сих пор (неполным, поскольку им не уверен, как вернуть идентификатор, и если им вставить правильную информацию):

def post_add(conn, username, message): 

    cursor = conn.cursor() 
    cursor.execute("INSERT INTO posts (timestamp, username, message) VALUES (CURRENT_TIMESTAMP,?,?)" 
        , (username, message)) 
    db.commit() 

В таблице:

CREATE TABLE posts (
      id integer unique primary key autoincrement, 
      timestamp text default CURRENT_TIMESTAMP, 
      username text, 
      message text, 
      FOREIGN KEY(username) REFERENCES users(name) 
); 
+0

В чем проблема? – skyline75489

+0

Посмотрите на http://stackoverflow.com/questions/6242756/how-to-retrieve-inserted-id-after-inserting-row-in-sqlite-using-python для извлечения идентификатора последнего вставленного строка в sqlite. Что касается метки времени, поскольку у вас есть значение по умолчанию, вы можете опустить ее в запросе вставки, и она будет автоматически добавлена. – stellasia

+0

@stellasia благодарит первую ссылку, помогаемую с возвратом. Я также должен установить ограничение длины для сообщения, которое будет отправлено, в результате чего, если сообщение длинное, оно не должно допускать вставки сообщения. Значит ли это, что мне не нужно добавлять CURRENT_TIMESTAMP в VALUES? –

ответ

2

Объект курсор имеет последний идентификатор вставки в свой атрибут lastrowid.

cursor.execute('INSERT ...') 
new_id = cursor.lastrowid 
db.commit() 
return new_id 
1

Вы можете использовать что-то вроде:

def post_add(db, usernick, message): 
    cursor = db.cursor() 
    cursor.execute("INSERT INTO posts (usernick, content) VALUES (?,?)" 
       ,(usernick, message)) 
    inserted_id = cursor.lastrowid 
    db.commit() 
    return inserted_id 

Что касается предельного размера текста, я не в курсе способ сделать это в SQLite, но вы можете проверить это в Python, например, добавив эти две строки в начале вашей функции:

if len(message) > MAX_ALLOWED_LENGTH: 
    return None 
Смежные вопросы