2017-09-07 6 views
2

내 go app은 여러 데이터베이스를 지원해야합니다. 즉, 서로 다른 데이터베이스에서 동일한 바이너리를 실행하면 앱이 작동하는 데이터베이스가 구성에 따라 결정됩니다.golang에서 다중 SQL 구문 (mysql vs postgres)을 지원하는 방법

문제는 각 데이터베이스에 자체 준비 문 구문이 있다는 것입니다. 예 :

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

는 포스트 그레스 위해 작동하지만 MySQL은 작동하지 않습니다.

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

mysql에서는 작동하지만 포스트그레스에서는 작동하지 않습니다.

저주받지 말 것 런타임시 문자열을 편집하거나 여러 개의 쿼리를 유지하여 해결할 수 있습니다.

더 좋은 방법이 있습니까?

내 모든 db 액세스를 제어 할 외부 라이브러리가있는 거대한 추상화를 원하지 않지만 구문을 고의적으로 수정하는 가벼운 라이브러리가 있으면 좋은 결과를 얻을 수 있습니다.

EDIT : 내가 전에 말한 것을 요약하면, 저를 귀찮게하는 부분은 mysql에서 "?"를 사용해야한다는 것입니다. 포스트 그레스 당신 $ 1 $ 2 ...

건배

이 특별한 경우
+0

https://github.com/Masterminds/squirrel과 같이 유창한 SQL을 작성하는 데 lib를 사용할 수 있습니다. –

+0

'거대한 추상화'란 무엇을 의미합니까? ORM 사용에 반대하십니까? ORM과 같은 소리가 정확히 필요한 것입니다. ORM을 사용하는 것에 반대하지 않는다면, GORM은 친구입니다. - http://jinzhu.me/gorm/ – Chikipowpow

+0

지금 당장은 하나의 테이블 만 가지고 있으며, 아마도 매우 효율적인 두 가지 쿼리 만있을 것입니다. 그들은 여러 데이터베이스로 작업해야합니다. 나는 종교적으로 ORM에 반대하지도 않으며, ORM에 대해서도 적절하지 않다고 생각합니다. – gba

답변

0

합니다 (SQL의 끝 부분에 자리 홀더를 {{산도}} 사용 strings.Replace를 사용)를 사용하여 다음을 수행해야합니다 동안 그것으로 바꾸시겠습니까? 또는 db 드라이버에 따라 $ 1.