私は間違いなく私が見落としている賢明な解決策を持っています。私はPythonプロジェクトをsqlite3を使用していました。これは大変好きで、常に使用しています。スケーリングが問題になる場合には、postgresで実行することもサポートしたいと思っていました。Pythonのsqlite3とpyscopgに同じ置換文字を使用しますか?
実際にはPythonデータベースの抽象化レイヤーが実際には1つもないことが示唆されていますが、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のために働くだろう?
これは、このような機能があることを意味します。これはどんな種類のエレガントな解決法にも反しています。私は実際にクエリを作成するために何らかの文字列置換を試してみたいとは思いません。私のブロッカーになる。
どのような考えですか?
"事実上のPythonデータベースの抽象化レイヤー" - [SQLAlchemy?](http://www.sqlalchemy.org/) – jwodder