SQL 연금술 소개
SQL 연금술 제품 ORM의 아이디어의 구체적인 실현
ORM : 객체 관계 매핑 이데올로기 객체 관계 매핑
데이터베이스는 자원 객체 지향 클래스이며, 객체와 연관된
테이블 === "클래스
데이터 === '객체
아이디어는 특정 제품이 SQLAlchemy의 파이썬에서 더 유명하다 달성하는 것입니다,
SQL 연금술은 타사 패키지, 우리는 cmd를 입력 pip3 설치 SQLAlchemy의 설치 할 필요가있다
우리가 작동 할 수있는 몇 가지 기본 작업은 데이터베이스의 클래스와 목적을 달성하기 위해
작업 테이블 만들기
에서 SQLAlchemy의 가져 오기 create_engine sqlalchemy.ext.declarative 가져 오기에서이 declarative_base SQLAlchemy의 열 가져 오기, 정수, 문자열, 날짜 시간은, 열거 형, 외래 키, UniqueConstraint, ForeignKeyConstraint가, 색인이 sqlalchemy.orm 가져 오기 sessionmaker에서, 관계 # 먼저 연결 개체 데이터베이스 생성 엔진을 = create_engine ( '+ MySQL의 pymysql : // 루트 : [email protected] :? 3306 / DB4 캐릭터 세트 = UTF8'max_overflow 5 =) # 사용자 이름과 암호를 포함하여 조건의 수는, IP 포트를 연결하는 연결을 지정해야합니다, 또한 지정해야 연결 풀 max_overflow는 최대 연결 수를 지정 #는 참고를 : 거기에 영향을 미치지 않는 문자 인코딩을 지정, 데이터베이스 만들 때 인코딩을 지정해야 # 기본 클래스를 만들을, 다른 클래스이 클래스는 테이블로 매핑 할 수 있습니다 상속 기본 = declarative_base () 클래스 클래스 (자료) : # 테이블의 이름을 지정하는 테이블을 작성 __tablename__ = '클래스' # 필드를 소정 지정된 유형과 제약 ID = 열은 (정수, primary_key와는 = 사실, AUTOINCREMENT = 참) CNAME은 열 = (문자열 (32), null 허용 = 거짓, server_default = '') 것을 # 참고 : 기본 값을 설정하는 server_default되어야하며 int 형의 설정하면 기본값은 () STR의 약 설정해야 요지 = 열 (문자열 (32), null 허용이 = 거짓, server_default = '', 인덱스 = 참) 고유 인덱스 또는 인덱스를 추가 한 컬럼에 #이 직접 제공 될 수있다 즉 직접 열에서 수 열 = (정수하는 외래 키 (Teacher.id))를 classes_id # 첨가 플러스 설정하는 외래 키 () 메소드에 의해, 내부에 배치되어 그 중 하나 개의 키 관계이면이 # 키 것은 아웃 많은 관계 조건은 고유 인덱스를 추가해야합니다 # EG는 (정수하는 외래 키 (Teacher.id), UNIQUE = 참) 열 =을 classes_id을 __table_args__ = ( UniqueConstraint (SNAME, 전화 번호, 이름 = 'uix_snname_phone'), 인덱스 ( 'ix_addr를' ADDR) ) # 공동 공동 인덱스를 설정하려는 것은 고유 인덱스 또는 단어입니다 그것은 __table_args__의 설정해야합니다 UniqueConstraint, 인덱스 완전한 색인에 의해 # Base.metadata.drop_all (엔진) # 삭제 Base.metadata.create_all (엔진) # 만든 # 마침내 매핑 테이블을 생성하고 위의 두 가지 방법에 의해 요구되는 테이블 삭제 # 참고 것을 : # 1 위, 삭제 만 제거합니다있다 당신이 데이터베이스 테이블 매핑되지 않은 경우 테이블 매핑은, 여유가 없다 삭제 원래 빈 데이터베이스, 그것은 오류하지 않을 경우 # , 이미 존재하는이 테이블 이름을 만든 다음 경우, # 2 이들은 실행하지 등가 생성을 커버하지 않을
기본 데이터 변경 검색 삭제
쿼리는 첫 번째 명령을 변환하기위한 쿼리 개체 세션을 생성하고 우리가 결과를 얻을 수 있도록해야한다 세션 = sessionmaker (바인딩 = egine) #을 연결 개체에 바인딩 할 필요성에 대해 세션 = 세션 () 사전 문 : 쿼리 외에 다른 작업을 수행해야 데이터베이스에 실제 동작을 실행에여 session.commit하는 # ------------------------------------ ------------------------------------ add_all ())를 추가 (추가 #가에서 데이터를 생성해야 더 증가 열이 다른 주요 과제로 설정되지 속성 해당 프로그램이 대상이며, 거기 OBJ = 클래스 (CNAME = '클래스 2 년) session.add (OBJ) #하면 추가 데이터 행을 (객체 추가 ) session.add_all ([OBJ, obj2보다]) #에 add_all ()로드 그리스트, 데이터의 복수의 부가 중 # ------------------------- ----------------------------------------------- 쿼리 쿼리 ( ) # 모든 모든 필드를 가지고 확인 된 RE = session.query (클래스)을 .ALL ( ) #가 물체 함유하는리스트를 반환 # 검사가 모두 특정 단어를 취할 SQL 문 session.query (클래스) # 프린트 아웃 입술 = session.query (클래스) 좁은 방 ( ) #는 그 객체를 반환 제 촬영 (Classes.cname) .ALL () RES = session.query 튜플 원소를 함유 #이 목록을 반환을 쿼리 그룹은 값 서 고해상도 = session.query (Classes.cname) 좁은 방을 ( ) #은 첫 번째를 얻을 반환 튜플 # 특정 필드를 취할 * 한 SQL 문에 모든 필드의 동등한를 가져 컬럼에 해당합니다 또는 일부 열 둘 사이 # 차이가 얻을 : 모든 필드는 특정 필드 튜플 돌아와 객체 돌아올 수 있습니다 특정 조건이 다음과 같은 쿼리 봐야 # #을 ---------------- -------------------------------------------------- ------ 업데이트 () 수정 변경의 필요성을 찾은 다음 업데이트에 의해 수정 먼저 발견 #을 (== Classes.id 1.) session.query합니다 (클래스) .filter .update를 ({ 'CNAME': ' XXX '}) 를 사전에 배치 K # 업데이트, V는 내부 테이블 열 값을 대응 --------------------------- # --------------------------------------------- 삭제 () 삭제 #을 삭제 후도 삭제 먼저 값을 알아 내야하고, (클래스) .filter (Classes.id == session.query를 ) (1) .delete를
여 session.commit ()
은 Session.close ()
다른 쿼리
다음과 같은 SQL 질의 방법에서 연금술은 상기 SQL 문을 달성하기 위해 실질적으로 대응하고있다
어디에
조건 쿼리 필터 () filter_by () 여기서, 판정 조건을 작성 # 브래킷 (복수 일 수있다) 다음의 차이 모두 session.query (클래) .filter (Classes.id ==. 1) # 특정 괄호 안에 넣어 이는 목록 가치있는 열 session.query (클래) .filter_by (상기 식 1에 언급) # 브래킷이 과제에 상당하는 열 이름 = 값 (넣어 위상있을 것 이상의 테이블 및 컬럼 이름이 동시에 나타나는 체크인 문제) session.query합니다 (클래스) .filter (~ == Classes.id. 1) # 의미를 부정한다 ~
처럼
퍼지 매칭 등 같은 와일드 () session.query (클래) .filter (Classes.cname.like ( "킹 %%")) 필터의 #은 열이 같은 퍼지 매칭 법을 지적하는데 사용될 수있다
~와 ~ 사이에있는
및 BETWEEN) (BETWEEN session.query .filter (Classes.id.between (1,2)) (클래) # 및 열에 의해 지적도로서, 등, BETWEEN 폐쇄 간격
/ NOT IN에서
하지에서의 IN_ notin_ session.query (클래) .filter (Classes.id.in _ ([. 1])) session.query (클래) .filter (Classes.id.notin _ ([1,2,4])) # 또한 특정 방법에 의해 열을 지적 할 수 , IN_ 또는 notin_이 반복 가능 객체의 내부에 처해야한다 #주의
한도
제한 슬라이스 session.query (클래) :. 2 6 : 2] # 마이크로톰 구현과 같은리스트 지정된 절단 길이 및 단계 슬라이싱
주문
오더 별 order_by () session.query (클래) .order_by (Classes.id.desc ()) 의 열을 정렬을 지정할 수있는 쿼리로서 #의 order_by는 ASC 내림차순 내림차순 오름차순 방법을 지적하거나 할 #에게 동일한 브래킷 당신은 또한 여러 열 정렬, 일관된 사용 및 SQL 문 사용을 지정할 수있는
그룹화 (갖는)
그룹 (기준 GROUP_BY) HAVING () HAVING # 그것이 FUNC 방법을 가져와야합니다, 집계 함수를 사용하려면 sqlalchemy.sql 가져 오기 FUNC의에서 session.query (func.max (Classes.id)). GROUP_BY (Classes.cname) .having를 (func.max (Classes.id)>. (3)) FUNC의 지적해야 쿼리가 사용 # 집계 기능 마지막 컬럼에 따라 패킷 # 기, 및 (HAVING 지적 할 수있다)의 보조를 조회
심지어 테이블 쿼리
비록 테이블 대체로 균일 테이블 session.query (클래스, 학생) # 직접 문제 직교 제품있을 것, 두 테이블을 연결 외래 키 판정 통해 # session.query (클래스, 학생), 필터 (Classes.id == Student.class_id)는 ()에 가입 연결 왼쪽 session.query (학생)를 .join (클래) # 한 대응 테이블로 조인 만 내부 접속 회원 가입 session.query를 (학생) .join (클래스, isouter = 참) #은 참으로 isouter가 왼쪽으로 연결된다 가입 하지만, 값이이 클래스의 이름을 얻으려면, 그 클래스는 쿼리에서 테이블을 넣어해야합니다
정기 검사 페깅
긍정적 인 체크 동격 관계 # 숨겨진 속성 테이블은 외래 키 (속성이 컬럼에 정의)이 추가 = 관계 ATTR ( '는 클래스'역 참조 = 'hideattr') 첫 번째와 연관된 # 관계를 당신을 테이블의 외래 키는, 역 참조 숨겨진 열을 다른 테이블 인 경우 클래스 (베이스) 클래스 : __tablename__이 = '클래스' ID = 열이 (정수, primary_key와는 = 사실 AUTOINCREMENT = 참) CNAME이 열을 = (문자열 (32), Null 허용 = 거짓, server_default = '') 클래스 학생 (자료) : ID = 열 (정수, primary_key와 = 사실, AUTOINCREMENT = 참) SNAME = 열 (문자열 (32), null 허용이 = 거짓, server_default = '') CLASS_ID = 열 (정수 하는 외래 키 (Classes.id)) class_type = 관계 ( '는 클래스'역 참조 = "XXX") # 학생 학생이 테이블에 의해 그렇게.클래스는 대응하는 행을 찾을 CLASS_ID, 포인트 속성 분류 될 수있다 숨겨진 외부 키 테이블을 결합함으로써이 (학생) 열 체크 포지티브 라인이라고 함) 외부 키 테이블 (클래스를 바인딩 쿼리에 # 그리고 클래스가 얼마나 많은 학생들 점이 Classes.id XXX 점을 만날 수 #이 목록을 지적, 대상 학생의 목록 서 숨겨진 외래 키 테이블에 의해 바인드 (클래스) 열 체크를 역방향 조회라고 얼마나 많은 표 (학생) 라인과 라인
SQL 연금술 소개
SQL 연금술 제품 ORM의 아이디어의 구체적인 실현
ORM : 객체 관계 매핑 이데올로기 객체 관계 매핑
데이터베이스는 자원 객체 지향 클래스이며, 객체와 연관된
테이블 === "클래스
데이터 === '객체
아이디어는 특정 제품이 SQLAlchemy의 파이썬에서 더 유명하다 달성하는 것입니다,
SQL 연금술은 타사 패키지, 우리는 cmd를 입력 pip3 설치 SQLAlchemy의 설치 할 필요가있다
우리가 작동 할 수있는 몇 가지 기본 작업은 데이터베이스의 클래스와 목적을 달성하기 위해
작업 테이블 만들기
에서 SQLAlchemy의 가져 오기 create_engine sqlalchemy.ext.declarative 가져 오기에서이 declarative_base SQLAlchemy의 열 가져 오기, 정수, 문자열, 날짜 시간은, 열거 형, 외래 키, UniqueConstraint, ForeignKeyConstraint가, 색인이 sqlalchemy.orm 가져 오기 sessionmaker에서, 관계 # 먼저 연결 개체 데이터베이스 생성 엔진을 = create_engine ( '+ MySQL의 pymysql : // 루트 : [email protected] :? 3306 / DB4 캐릭터 세트 = UTF8'max_overflow 5 =) # 사용자 이름과 암호를 포함하여 조건의 수는, IP 포트를 연결하는 연결을 지정해야합니다, 또한 지정해야 연결 풀 max_overflow는 최대 연결 수를 지정 #는 참고를 : 거기에 영향을 미치지 않는 문자 인코딩을 지정, 데이터베이스 만들 때 인코딩을 지정해야 # 기본 클래스를 만들을, 다른 클래스이 클래스는 테이블로 매핑 할 수 있습니다 상속 기본 = declarative_base () 클래스 클래스 (자료) : # 테이블의 이름을 지정하는 테이블을 작성 __tablename__ = '클래스' # 필드를 소정 지정된 유형과 제약 ID = 열은 (정수, primary_key와는 = 사실, AUTOINCREMENT = 참) CNAME은 열 = (문자열 (32), null 허용 = 거짓, server_default = '') 것을 # 참고 : 기본 값을 설정하는 server_default되어야하며 int 형의 설정하면 기본값은 () STR의 약 설정해야 요지 = 열 (문자열 (32), null 허용이 = 거짓, server_default = '', 인덱스 = 참) 고유 인덱스 또는 인덱스를 추가 한 컬럼에 #이 직접 제공 될 수있다 즉 직접 열에서 수 열 = (정수하는 외래 키 (Teacher.id))를 classes_id # 첨가 플러스 설정하는 외래 키 () 메소드에 의해, 내부에 배치되어 그 중 하나 개의 키 관계이면이 # 키 것은 아웃 많은 관계 조건은 고유 인덱스를 추가해야합니다 # EG는 (정수하는 외래 키 (Teacher.id), UNIQUE = 참) 열 =을 classes_id을 __table_args__ = ( UniqueConstraint (SNAME, 전화 번호, 이름 = 'uix_snname_phone'), 인덱스 ( 'ix_addr를' ADDR) ) # 공동 공동 인덱스를 설정하려는 것은 고유 인덱스 또는 단어입니다 그것은 __table_args__의 설정해야합니다 UniqueConstraint, 인덱스 완전한 색인에 의해 # Base.metadata.drop_all (엔진) # 삭제 Base.metadata.create_all (엔진) # 만든 # 마침내 매핑 테이블을 생성하고 위의 두 가지 방법에 의해 요구되는 테이블 삭제 # 참고 것을 : # 1 위, 삭제 만 제거합니다있다 당신이 데이터베이스 테이블 매핑되지 않은 경우 테이블 매핑은, 여유가 없다 삭제 원래 빈 데이터베이스, 그것은 오류하지 않을 경우 # , 이미 존재하는이 테이블 이름을 만든 다음 경우, # 2 이들은 실행하지 등가 생성을 커버하지 않을
기본 데이터 변경 검색 삭제
쿼리는 첫 번째 명령을 변환하기위한 쿼리 개체 세션을 생성하고 우리가 결과를 얻을 수 있도록해야한다 세션 = sessionmaker (바인딩 = egine) #을 연결 개체에 바인딩 할 필요성에 대해 세션 = 세션 () 사전 문 : 쿼리 외에 다른 작업을 수행해야 데이터베이스에 실제 동작을 실행에여 session.commit하는 # ------------------------------------ ------------------------------------ add_all ())를 추가 (추가 #가에서 데이터를 생성해야 더 증가 열이 다른 주요 과제로 설정되지 속성 해당 프로그램이 대상이며, 거기 OBJ = 클래스 (CNAME = '클래스 2 년) session.add (OBJ) #하면 추가 데이터 행을 (객체 추가 ) session.add_all ([OBJ, obj2보다]) #에 add_all ()로드 그리스트, 데이터의 복수의 부가 중 # ------------------------- ----------------------------------------------- 쿼리 쿼리 ( ) # 모두 선택, 모든 필드에 걸릴 고해상도를 = session.query (클래스) .ALL ( #)의 목록을 반환, 포함은 객체 SQL 문 session.query (클래스) # 프린트 아웃 입술 = session.query (클래스) 좁은 방 ( ) #는 그 객체를 반환 제 촬영 # 검사가 모두 특정 단어를 취할 (Classes.cname) .ALL () RES = session.query 튜플 원소를 함유 #이 목록을 반환을 쿼리 그룹은 값 서 고해상도 = session.query (Classes.cname) 좁은 방을 ( ) #은 첫 번째를 얻을 반환 튜플 # 특정 필드를 취할 * 한 SQL 문에 모든 필드의 동등한를 가져 컬럼에 해당합니다 또는 일부 열 둘 사이 # 차이가 얻을 : 모든 필드는 특정 필드 튜플 돌아와 객체 돌아올 수 있습니다 특정 조건이 다음과 같은 쿼리 봐야 # #을 ---------------- -------------------------------------------------- ------ 업데이트 () 수정 변경의 필요성을 찾은 다음 업데이트에 의해 수정 먼저 발견 #을 (== Classes.id 1.) session.query합니다 (클래스) .filter .update를 ({ 'CNAME': ' XXX '}) 를 사전에 배치 K # 업데이트, V는 내부 테이블 열 값을 대응 --------------------------- # --------------------------------------------- 삭제 () 삭제 #을 삭제 후도 삭제 먼저 값을 알아 내야하고, (클래스) .filter (Classes.id == session.query를 ) (1) .delete를
여 session.commit ()
은 Session.close ()
다른 쿼리
다음과 같은 SQL 질의 방법에서 연금술은 상기 SQL 문을 달성하기 위해 실질적으로 대응하고있다
어디에
조건 쿼리 필터 () filter_by () 여기서, 판정 조건을 작성 # 브래킷 (복수 일 수있다) 다음의 차이 모두 session.query (클래) .filter (Classes.id ==. 1) # 특정 괄호 안에 넣어 이는 목록 가치있는 열 session.query (클래) .filter_by (상기 식 1에 언급) # 브래킷이 과제에 상당하는 열 이름 = 값 (넣어 위상있을 것 이상의 테이블 및 컬럼 이름이 동시에 나타나는 체크인 문제) session.query합니다 (클래스) .filter (~ == Classes.id. 1) # 의미를 부정한다 ~
처럼
퍼지 매칭 등 같은 와일드 () session.query (클래) .filter (Classes.cname.like ( "킹 %%")) 필터의 #은 열이 같은 퍼지 매칭 법을 지적하는데 사용될 수있다
~와 ~ 사이에있는
및 BETWEEN) (BETWEEN session.query .filter (Classes.id.between (1,2)) (클래) # 및 열에 의해 지적도로서, 등, BETWEEN 폐쇄 간격
/ NOT IN에서
하지에서의 IN_ notin_ session.query (클래) .filter (Classes.id.in _ ([. 1])) session.query (클래) .filter (Classes.id.notin _ ([1,2,4])) # 또한 특정 방법에 의해 열을 지적 할 수 , IN_ 또는 notin_이 반복 가능 객체의 내부에 처해야한다 #주의
한도
제한 슬라이스 session.query (클래) :. 2 6 : 2] # 마이크로톰 구현과 같은리스트 지정된 절단 길이 및 단계 슬라이싱
주문
오더 별 order_by () session.query (클래) .order_by (Classes.id.desc ()) 의 열을 정렬을 지정할 수있는 쿼리로서 #의 order_by는 ASC 내림차순 내림차순 오름차순 방법을 지적하거나 할 #에게 동일한 브래킷 당신은 또한 여러 열 정렬, 일관된 사용 및 SQL 문 사용을 지정할 수있는
그룹화 (갖는)
그룹 (기준 GROUP_BY) HAVING () HAVING # 그것이 FUNC 방법을 가져와야합니다, 집계 함수를 사용하려면 sqlalchemy.sql 가져 오기 FUNC의에서 session.query (func.max (Classes.id)). GROUP_BY (Classes.cname) .having를 (func.max (Classes.id)>. (3)) FUNC의 지적해야 쿼리가 사용 # 집계 기능 마지막 컬럼에 따라 패킷 # 기, 및 (HAVING 지적 할 수있다)의 보조를 조회
심지어 테이블 쿼리
비록 테이블 대체로 균일 테이블 session.query (클래스, 학생) # 직접 문제 직교 제품있을 것, 두 테이블을 연결 외래 키 판정 통해 # session.query (클래스, 학생), 필터 (Classes.id == Student.class_id)는 ()에 가입 연결 왼쪽 session.query (학생)를 .join (클래) # 한 대응 테이블로 조인 만 내부 접속 회원 가입 session.query를 (학생) .join (클래스, isouter = 참) #은 참으로 isouter가 왼쪽으로 연결된다 가입 하지만, 값이이 클래스의 이름을 얻으려면, 그 클래스는 쿼리에서 테이블을 넣어해야합니다
정기 검사 페깅
긍정적 인 체크 동격 관계 # 숨겨진 속성 테이블은 외래 키 (속성이 컬럼에 정의)이 추가 = 관계 ATTR ( '는 클래스'역 참조 = 'hideattr') 첫 번째와 연관된 # 관계를 당신을 테이블의 외래 키는, 역 참조 숨겨진 열을 다른 테이블 인 경우 클래스 (베이스) 클래스 : __tablename__이 = '클래스' ID = 열이 (정수, primary_key와는 = 사실 AUTOINCREMENT = 참) CNAME이 열을 = (문자열 (32), Null 허용 = 거짓, server_default = '') 클래스 학생 (자료) : ID = 열 (정수, primary_key와 = 사실, AUTOINCREMENT = 참) SNAME = 열 (문자열 (32), null 허용이 = 거짓, server_default = '') CLASS_ID = 열 (정수 하는 외래 키 (Classes.id)) class_type 관계 = ( '는 클래스'역 참조 = "XXX") # 학생 학생이 테이블에 의해 그렇게.클래스는 대응하는 행을 찾을 CLASS_ID, 포인트 속성 분류 될 수있다 숨겨진 외부 키 테이블을 결합함으로써이 (학생) 열 체크 포지티브 라인이라고 함) 외부 키 테이블 (클래스를 바인딩 쿼리에 # 그리고 클래스가 얼마나 많은 학생들 점이 Classes.id XXX 점을 만날 수 #이 목록을 지적, 대상 학생의 목록 서 숨겨진 외래 키 테이블에 의해 바인드 (클래스) 열 체크를 역방향 조회라고 얼마나 많은 표 (학생) 라인과 라인