我有一个自己画的角落问题,希望我有一个明智的解决方案。我有一个使用sqlite3的Python项目,我非常喜欢并一直使用它,我想尝试在postgres上运行它,以防缩放成为一个问题。
一些初步的研究表明,实际上没有一个事实上的Python数据库抽象层(希望我没有弄错),但幸运的是psycopg2似乎与sqlite3的结构和方法非常相似,而且我能够只需添加一些辅助函数并将案例切换到现有代码,以允许它使用相同的查询支持这两个数据库库。
唯一的例外,令人难以置信的是变量的替代品; sqlite3需要?
而psycopg2需要%s
。对于我所知道的人来说,这些可能是sqlite和postgres本身所固有的。
这意味着像这样的函数:
cur.execute("INSERT INTO repositories (repository_url, repository_name, repository_type, repository_thumbnail, last_crawl_timestamp, item_url_pattern) VALUES (%s,%s,%s,%s,%s,%s)", (repository_url, repository_name, repository_type, repository_thumbnail, time.time(), item_url_pattern))
只适用于postgres,如果我将%s更改为?,它只适用于sqlite。这违背了任何一种优雅的解决方案 - 我真的不想装配某种字符串替换来构建我的查询,因为这会很快变得愚蠢 - 而且大多数情况下我只是惊讶于这已经证明了成为我的阻挡者。
有什么想法吗?