如果我正确理解您的问题,您的表格如下所示:
CREATE TABLE files (
file_id INTEGER PRIMARY KEY AUTOINCREMENT,
filename TEXT
)
你想原子地:
- 使用自动递增的主键值在表中创建一个新行。
- 获取该主键。
- 使用从键值派生的名称设置行的文件名。
在 Python 中使用 sqlite3,使用事务(根据您的要求):
import sqlite3
con = sqlite3.connect('files.db')
with con: # Context manager on the connection manages the transaction
cur = con.cursor()
cur.execute('INSERT INTO files DEFAULT VALUES')
file_id = cur.lastrowid # Get the primary key of the new row
cur.execute(
'UPDATE files SET filename="file"||file_id WHERE file_id=?',
(file_id,)
)
有关上下文管理器的更多详细信息,请参见此处:
http://docs.python.org/2/library/sqlite3.html
运行后:
sqlite> SELECT * FROM files;
1|file1
由于您使用的是 Flask,因此没有真正的区别。但是,您可能会在 before_request 中调用 connect 并将结果分配给全局,如下所示:
http://flask.pocoo.org/docs/patterns/sqlite3/
最后,您可以考虑的其他方法是表上的 VIEW(如果文件名永远不会改变,并且总是简单地从主键派生),或者表的 AFTER INSERT 触发器。