>백엔드 개발 >Golang >Golang 데이터베이스 쿼리에서 슬라이스가 포함된 \'IN\' 절을 처리하는 방법: 함정을 피하려면?

Golang 데이터베이스 쿼리에서 슬라이스가 포함된 \'IN\' 절을 처리하는 방법: 함정을 피하려면?

Barbara Streisand
Barbara Streisand원래의
2024-11-01 10:29:30940검색

How to Handle

Slice IN 절을 사용한 Golang 데이터베이스 쿼리: 과제 이해

Golang에서 정수 슬라이스와 함께 IN 절을 활용하려고 할 때 데이터베이스 쿼리를 실행하면 예기치 않은 동작이 발생할 수 있습니다. 이에 대한 이유를 살펴보고 관용적인 해결책을 찾아보겠습니다.

표준 데이터베이스/sql 패키지는 슬라이스가 있는 IN 절을 자동으로 처리하지 않습니다. 대신 쿼리를 데이터베이스로 직접 변환합니다. 여기서 바인드 변수(?)는 단일 인수를 나타냅니다. 이로 인해 슬라이스 길이에 따라 가변 개수의 인수를 포함하려고 할 때 혼란이 발생할 수 있습니다.

예를 들어 다음 쿼리는 실패합니다.

var levels = []int{4, 6, 7}
rows, err := db.Query("SELECT * FROM users WHERE level IN (?);", levels)

이 제한을 극복하려면 데이터베이스 쿼리를 더 효과적으로 제어할 수 있는 sqlx 패키지를 활용할 수 있습니다. sqlx.In을 사용하여 쿼리를 전처리하면 슬라이스를 인수로 지정할 수 있습니다.

var levels = []int{4, 6, 7}
query, args, err := sqlx.In("SELECT * FROM users WHERE level IN (?);", levels)

이제 쿼리는 슬라이스 길이에 해당하는 여러 바인드 변수를 포함하도록 수정되었으며, 성공적으로 실행할 수 있습니다.

sqlx.In 사용에 대한 더 자세한 내용은 Godoc의 설명서를 참조하세요. 이 접근 방식은 Golang 데이터베이스 쿼리에서 슬라이스가 있는 IN 절을 처리하는 보다 관용적이고 유연한 방법을 제공합니다.

위 내용은 Golang 데이터베이스 쿼리에서 슬라이스가 포함된 \'IN\' 절을 처리하는 방법: 함정을 피하려면?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.