【发布时间】:2012-07-04 11:39:37
【问题描述】:
我正在使用 Flask 和 SQLite 作为数据库编写 Python Web 应用程序
我有一个带有自动递增 PK 和文件名的表。我想在插入此表时生成文件名,以便第一个文件命名为 file1、第二个文件 2 等。最好的方法是什么?我的第一个想法是做一个事务,我找出下一个 auto-inc,生成文件名,然后插入数据库并提交。问题是我似乎在 Flask 中找不到任何关于事务的信息,听起来它是自动完成的,但我不确定我是否可以依赖 id 查找和 insert 是原子的。我猜另一种选择是在插入语句中以某种方式使用 auto-inc 值,那个新值在那个时候是否可用?任何对这些方法或替代方法的见解将不胜感激!
【问题讨论】:
-
为什么不直接使用主键呢?您必须在代码中生成文件名,而不是在数据库中,但如果基本名称始终相同,您会很头疼。
-
这就是我想要做的。这就是这个解决方案:我的第一个想法是做一个事务,在其中我找出下一个 auto-inc,生成文件名,然后插入数据库并提交。问题是我似乎在 Flask 中找不到任何关于事务的信息,这听起来像是自动完成的,但我不确定我是否可以依赖 id 查找和 insert 是原子的。
-
不,我的意思是,为什么不简单地做这样的事情:
now = datetime.now(); conn.execute("INSERT INTO MyFileTable (Created) VALUES (?)", (now, ));然后稍后您可以从数据库中取出 idid = conn.execute("SELECT ID FROM MyFileTable WHERE Created = ?", (now, )); print "filename{}".format(id)?Created可以是您唯一标识这些文件的任何其他方式。 -
嗯,绝对是一个有趣的解决方案,没想到使用这样的时间戳。出于某种原因,我在使用 g.db.execute('begin') 时遇到了错误,但我不再是这样了,所以我将继续使用事务。感谢您的建议!
标签: python sqlite transactions flask