SQLAlchemy IN 절
sqlalchemy 에서이 쿼리를 수행하려고합니다.
SELECT id, name FROM user WHERE id IN (123, 456)
[123, 456]
실행 시간에 목록을 바인딩하고 싶습니다 .
어때요?
session.query(MyUserClass).filter(MyUserClass.id.in_((123,456))).all()
편집 : ORM이 없으면
session.execute(
select(
[MyUserTable.c.id, MyUserTable.c.name],
MyUserTable.c.id.in_((123, 456))
)
).fetchall()
select()
두 개의 매개 변수를 사용합니다. 첫 번째 매개 변수는 검색 할 필드 목록이고 두 번째 매개 변수는 where
조건입니다. c
(또는 columns
) 속성을 통해 테이블 개체의 모든 필드에 액세스 할 수 있습니다 .
선언적 스타일 (예 : ORM 클래스)을 사용한다고 가정하면 매우 쉽습니다.
query = db_session.query(User.id, User.name).filter(User.id.in_([123,456]))
results = query.all()
db_session
동안 데이터베이스 세션, 여기 User
와 ORM 클래스입니다 __tablename__
동일 "users"
.
다른 방법은 SQLAlchemy와 함께 원시 SQL 모드를 사용하는 것입니다. SQLAlchemy 0.9.8, python 2.7, MySQL 5.X 및 MySQL-Python을 커넥터로 사용합니다.이 경우 튜플이 필요합니다. 내 코드는 다음과 같습니다.
id_list = [1, 2, 3, 4, 5] # in most case we have an integer list or set
s = text('SELECT id, content FROM myTable WHERE id IN :id_list')
conn = engine.connect() # get a mysql connection
rs = conn.execute(s, id_list=tuple(id_list)).fetchall()
모든 것이 당신을 위해 작동하기를 바랍니다.
주석을 기반으로하는이 질문에서 요구하는 식 API를 사용 in_
하면 관련 열의 방법을 사용할 수 있습니다 .
쿼리하려면
SELECT id, name FROM user WHERE id in (123,456)
사용하다
myList = [123, 456]
select = sqlalchemy.sql.select([user_table.c.id, user_table.c.name], user_table.c.id.in_(myList))
result = conn.execute(select)
for row in result:
process(row)
이 것을 가정 user_table
하고 conn
적절하게 정의되어있다.
위의 답변에 추가하십시오.
"IN"문으로 SQL을 실행하려면 다음을 수행하십시오.
ids_list = [1,2,3]
query = "SELECT id, name FROM user WHERE id IN %s"
args = [(ids_list,)] # Don't forget the "comma", to force the tuple
conn.execute(query, args)
두 가지 점 :
- IN 문 ( "... IN (% s)"과 같은)에 괄호가 필요하지 않습니다. "... IN % s"
- ID 목록을 튜플의 한 요소로 만듭니다. ","를 잊지 마십시오 : (ids_list,)
편집 목록의 길이가 1 또는 0 인 경우 오류가 발생합니다.
이미 엔진을 만들었다 고 가정하면 query_engine
(ORM을 사용하지 않고) 지금까지 찾은 가장 깨끗한 솔루션은 다음과 같습니다.
ids_list = [1,2,3]
query = "select id, name from users where id IN {}".format(tuple(ids_list))
with query_engine.connect() as con:
users = con.execute(query)
참고 : 이 목록에 하나 이상의 요소가 있거나 구문 오류가 발생하는 경우에만 작동합니다.
참고 URL : https://stackoverflow.com/questions/8603088/sqlalchemy-in-clause
'IT story' 카테고리의 다른 글
온 클릭 함수에서 문자열 매개 변수 전달 (0) | 2020.05.08 |
---|---|
Mockito를 사용하여 추상 클래스 테스트 (0) | 2020.05.08 |
MVC 4 @Scripts“존재하지 않습니다” (0) | 2020.05.08 |
Java 컬렉션을 훌륭하게 인쇄 (toString이 출력을 제대로 반환하지 않음) (0) | 2020.05.08 |
SQL 대소 문자 구분 문자열 비교 (0) | 2020.05.08 |