2017-09-07 6 views
2

私のgoアプリケーションは複数のデータベースをサポートするものとします。つまり、異なるデータベースで同じバイナリを実行している場合、アプリケーションが処理しているデータベースは設定によって決まります。golangで複数のSQL構文(mysql vs postgres)をサポートする方法

問題は、各データベースには独自の準備文があります。 例:

db.Prepare("select p, f, t from mytable where p = $1") 

はpostgresのために動作しますが、MySQLのために動作しません。

db.Prepare("select p, f, t from mytable where p = ?") 

mysqlでも動作しますが、postgresでは動作しません。

私はそれを実行時に文字列を編集するか、複数のクエリを維持することで解決できます。

良い方法がありますか?

私はすべてのdbアクセスを制御する外部ライブラリを持つ巨大な抽象化を望んでいませんが、ちょうど魔法のように構文を修正する軽量ライブラリがあれば、それでいいです。

EDIT: 私が前に言ったことを要約すると、私を悩ます部分は、mysqlの場合は "?" postgresのためにあなたは$ 1、$ 2 ...

乾杯

この特定のケースで
+0

https://github.com/Masterminds/squirrelのように流暢なSQLを書くためにlibを使用することができます –

+0

「いくつかの巨大な抽象化」とはどういう意味ですか?あなたはORMの使用に反対ですか? ORMのような音があなたが必要とするものであるからです。 ORMの使用に反対していないなら、GORMはあなたの友人です - http://jinzhu.me/gorm/ – Chikipowpow

+0

私は今のところ1つのテーブルしか持っていないので、非常に効率的でなければならないクエリが2つしかないでしょう。彼らは複数のデータベースで作業する必要があります。私は宗教的にもORMでもないので、私のユースケースでは適切ではないと思っています。 – gba

答えて

0

(SQLの終わりにプレースホルダを{{のpH}}を使用してstrings.Replaceを使用)にを使用する必要がありますしながら、それと置き換える? dbドライバによれば$ 1です。

関連する問題