我有一个postgres数据库,我用来存储用户音频文件。我允许用户为文件提供标题,并且该标题用作文件位置的URL的最后一个路径组件。然后我将标题和URL存储在我的数据库中。这显然不是解决问题的最佳方式,因为在重命名和遇到具有相同名称的多个文件时,我会遇到问题。我认为更好的方法是保持文件标题和url完全不相关,并使用postgres为每个上传的文件分配的主键作为url的最后一个路径组件。但是,url是在插入数据库之前创建的,因此我没有现成的主键。怎样才能解决这个问题?
这就是我目前正在插入文件的方式:
cur.execute('INSERT INTO files(user_id, title, url, share)'
'VALUES (%s, %s, %s, %s) RETURNING id;',
(user.id, file.title, file.url, file.share))
file_id = cur.fetchone()[0]
一个解决方案是,在写一行之前,我可以查询下一个可用的主键,并将该值用作我的url的最后一个路径组件,然后写入该行。但这需要两次调用服务器。