SQLAlchemy Core-결합 사용

결합은 SQL 표현식의 WHERE 절에서 사용되는 관계 연산자를 구현하는 SQLAlchemy 모듈의 함수입니다. 연산자 AND, OR, NOT 등은 두 개의 개별 논리 표현식을 결합하는 복합 표현식을 형성하는 데 사용됩니다. SELECT 문에서 AND를 사용하는 간단한 예는 다음과 같습니다.

SELECT * from EMPLOYEE WHERE salary>10000 AND age>30

SQLAlchemy 함수 and_ (), or_ () 및 not_ ()은 각각 AND, OR 및 NOT 연산자를 구현합니다.

and_ () 함수

AND로 결합 된 표현식의 연결을 생성합니다. 더 나은 이해를 위해 아래에 예가 나와 있습니다.

from sqlalchemy import and_

print(
   and_(
      students.c.name == 'Ravi',
      students.c.id <3
   )
)

이것은-

students.name = :name_1 AND students.id < :id_1

학생 테이블의 select () 구조에서 and_ ()를 사용하려면 다음 코드 줄을 사용하십시오.

stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))

다음 성격의 SELECT 문이 생성됩니다-

SELECT students.id, 
   students.name, 
   students.lastname
FROM students
WHERE students.name = :name_1 AND students.id < :id_1

위의 SELECT 쿼리의 출력을 표시하는 전체 코드는 다음과 같습니다.

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()

students = Table(
   'students', meta, 
   Column('id', Integer, primary_key = True), 
   Column('name', String), 
   Column('lastname', String), 
)

from sqlalchemy import and_, or_
stmt = select([students]).where(and_(students.c.name == 'Ravi', students.c.id <3))
result = conn.execute(stmt)
print (result.fetchall())

학생 테이블이 이전 예에서 사용 된 데이터로 채워져 있다고 가정하면 다음 행이 선택됩니다.

[(1, 'Ravi', 'Kapoor')]

or_ () 함수

OR로 결합 된 표현식의 결합을 생성합니다. 위 예제의 stmt 객체를 or_ ()를 사용하여 다음과 같이 교체합니다.

stmt = select([students]).where(or_(students.c.name == 'Ravi', students.c.id <3))

다음 SELECT 쿼리와 효과적으로 동일합니다-

SELECT students.id, 
   students.name, 
   students.lastname
FROM students
WHERE students.name = :name_1 
OR students.id < :id_1

대체를 수행하고 위의 코드를 실행하면 결과는 OR 조건에 속하는 두 행이됩니다.

[(1, 'Ravi', 'Kapoor'),
(2, 'Rajiv', 'Khanna')]

asc () 함수

오름차순 ORDER BY 절을 생성합니다. 이 함수는 열을 사용하여 함수를 매개 변수로 적용합니다.

from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))

문은 다음 SQL 식을 구현합니다-

SELECT students.id, 
   students.name, 
   students.lastname
FROM students 
ORDER BY students.name ASC

다음 코드는 학생 테이블의 모든 레코드를 이름 열의 오름차순으로 나열합니다.

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String, ForeignKey, select
engine = create_engine('sqlite:///college.db', echo = True)
meta = MetaData()
conn = engine.connect()

students = Table(
   'students', meta, 
   Column('id', Integer, primary_key = True), 
   Column('name', String), 
   Column('lastname', String), 
)

from sqlalchemy import asc
stmt = select([students]).order_by(asc(students.c.name))
result = conn.execute(stmt)

for row in result:
   print (row)

위의 코드는 다음과 같은 출력을 생성합니다.

(4, 'Abdul', 'Sattar')
(3, 'Komal', 'Bhandari')
(5, 'Priya', 'Rajhans')
(2, 'Rajiv', 'Khanna')
(1, 'Ravi', 'Kapoor')

desc () 함수

마찬가지로 desc () 함수는 다음과 같이 내림차순 ORDER BY 절을 생성합니다.

from sqlalchemy import desc
stmt = select([students]).order_by(desc(students.c.lastname))

동등한 SQL 표현식은 다음과 같습니다.

SELECT students.id, 
   students.name, 
   students.lastname
FROM students 
ORDER BY students.lastname DESC

그리고 위의 코드 줄에 대한 출력은-

(4, 'Abdul', 'Sattar')
(5, 'Priya', 'Rajhans')
(2, 'Rajiv', 'Khanna')
(1, 'Ravi', 'Kapoor')
(3, 'Komal', 'Bhandari')

between () 함수

BETWEEN 술어 절을 생성합니다. 일반적으로 특정 열의 값이 범위 사이에 있는지 확인하는 데 사용됩니다. 예를 들어, 다음 코드는 id 열이 2와 4 사이 인 행을 선택합니다.

from sqlalchemy import between
stmt = select([students]).where(between(students.c.id,2,4))
print (stmt)

결과 SQL 표현식은 다음과 유사합니다.

SELECT students.id, 
   students.name, 
   students.lastname
FROM students
WHERE students.id 
BETWEEN :id_1 AND :id_2

결과는 다음과 같습니다.

(2, 'Rajiv', 'Khanna')
(3, 'Komal', 'Bhandari')
(4, 'Abdul', 'Sattar')