우리는 와이즈 토토 3.3을 출시했습니다. 여러분은 이에 대해 기대하게 될 것입니다!
이 버전을 사용하면 가장 큰 혁신 중 하나를 활용할 수 있습니다. 파이썬 3.14:템플릿 문자열, 쓸 수 있게 해줍니다.표현력이 뛰어나고 안전한 쿼리.
어떻게 보이나요? 다음과 같은 것:
def fetch_person(콘, 이름):
# 'name'은 서버 측 매개변수로 안전하게 처리됩니다.
# 클라이언트 측 바인딩이 필요한 경우 올바르게 인용되고 이스케이프됩니다.
cur = conn.execute(t"SELECT * FROM people WHERE 이름 = name")
cur.fetchone()을 반환합니다.
구문은 다음과 동일합니다f-문자열, 다시 소개됨
유서 깊은 Python 3.6(아마도 Python 2를 최종적으로 종료한 기능일까요?)
하지만 이제는 Psycopg 3의 안전성 및 적응 유연성과 결합됩니다.
템플릿 문자열은 또한 동적 SQL 문을 생성하는 데 훨씬 더 도움이 됩니다.
보다 간결하게와이즈 토토.sql모듈:
def delete_something(conn, 테이블_이름, 이름):
# 클라이언트 측 쿼리 구성과 서버 측 매개변수 바인딩 혼합
conn.execute(t"DELETE FROM table_name:i WHERE name = name")
# 비모수적 명령문을 완전히 클라이언트 측에서 작성
conn.execute(t"NOTIFY table_name + '.deleted':i, name:l")
전체 내용 확인t-문자열 지원 문서영감을 얻으세요!
이전에는 다음만 가능했습니다.PostgreSQL 복합재 조정파이썬으로 데이터베이스 유형의 필드에 대한 엄격한 1:1 매핑이 있는 시퀀스 유형입니다.
이제 우리는 유연성을 더 얻었습니다. 생성 방법을 모두 사용자 정의할 수 있습니다. 일반적인 Python 객체(예: 키워드 인수만 취하는 객체) 비순차 속성에서 일련의 필드를 추출하는 방법 객체... 데이터 클래스 누구 있나요?
데이터 클래스에서 데이터 클래스 가져오기
psycopg.types.composite에서 CompositeInfo, Register_composite 가져오기
@데이터클래스
클래스 MiniPerson:
나이: 정수
이름: str
높이: 부동 | 없음 = 없음
@classmethod
def from_db(cls, seq, 정보):
cls(이름=seq[0], 나이=seq[1]) 반환
def to_db(자기, 정보):
[self.name, self.age] 반환
conn.execute("CREATE TYPE mini_person AS (이름 텍스트, 연령 int)")
info = CompositeInfo.fetch(conn, "mini_person")
레지스터_복합체(
정보, conn, 공장=MiniPerson,
make_object=MiniPerson.from_db, make_sequence=MiniPerson.to_db)
conn.execute("SELECT ('John', 33)::mini_person").fetchone()[0]
# MiniPerson(나이=33, 이름='John', 높이=없음)
conn.실행(
"SELECT (%(person)s).name || ' 내년은 ' || (%(person)s).age + 1이 됩니다.",
"사람": MiniPerson(name="John", age=33),
).fetchone()[0]
# 'John은 내년에 34세가 됩니다.'
Mypy나 다른 유형 검사기를 와이즈 토토와 함께 사용한다면 아마도 다음과 같은 것을 보았을 것입니다.
전화할 때 거짓 긍정페치원(). 100% 확신한다고 해도
귀하의 쿼리는 행을 반환합니다.페치원()가능한 것으로 주석이 추가되었습니다
돌아오는 중없음— 따라서 유형 검사기는 다음과 같은 패턴에 대해 불평합니다.
cur.execute("SELECT count(*) FROM my_table") # 항상 정확히 하나의 값을 반환합니다.
count = cur.fetchone()[0] # 오류: "tuple | None" 유형의 값은 인덱싱할 수 없습니다
와이즈 토토 3.3에서 커서는반복자, 반면에 이전에는 단지반복 가능. 그 차이는 미묘하지만 의미가 있습니다. iterator는 자체 반복 상태를 보유하므로 새 반복 상태를 만들 필요가 없습니다. 각 패스에 대한 객체입니다.
더 중요한 것은 이 변경으로 인해 다음을 사용할 수 있다는 것입니다.다음()또는다음()검색하다
레코드 - 이 함수는 절대 반환되지 않습니다.없음. 이것이 Mypy를 행복하게 만들고,
그리고 아마도 당신도 마찬가지일 것입니다:
cur.execute("SELECT count(*) FROM my_table")
개수 = 다음(현재)[0]
이제 연결 풀의 매개변수를 동적으로 변경할 수 있습니다. 요청에 따라 단기 비밀 토큰을 비밀번호로 지원하는 예 일부 클라우드 데이터베이스 제공업체에서 제공합니다.
유용한드레인()이제 모든 연결을 다시 생성하는 방법을 사용할 수 있습니다.
수영장. 예를 들어, 데이터베이스를 업데이트해야 할 때 유용합니다.
등록할 확장 유형의 OID를 찾기 위해 내부 검사: 드레이닝 없이
풀에 이미 있는 연결은 이후에도 오래된 상태로 유지됩니다.
어댑터가 구성되었습니다.
기타 개선 사항에는 이후 결과 탐색 시 유연성이 향상되었습니다.
에fetchmany()호출 또는 여러 결과 세트를 반환하는 문 이후,
쿼리가 실행된 후 로더를 재구성하는 기능 및 기타 많은 기능
다양한 개선 사항. 전체 목록은 다음에서 확인할 수 있습니다.와이즈 토토 출시
메모그리고풀 출시 노트!
Psycopg는 Python과 Python 간의 통신을 위한 사실상의 표준입니다. PostgreSQL — 수많은 비즈니스를 지원하는 두 가지 주요 구성 요소와 미션 크리티컬 인프라. 이렇게 중요한 도서관을 유지관리하는 것은 최고 수준의 신뢰성, 성능 및 보안을 위해서는 많은 노력이 필요합니다. 관리 및 지속적인 작업을 수행합니다.
Python과 PostgreSQL을 사용하고 인터페이스가 그들 사이는 여전히 견고하고 지속적으로 개선되어 새로운 언어를 지원합니다. 및 데이터베이스 기능을 고려하십시오.프로젝트를 지원하고 있습니다 💜
정말 감사합니다. 즐거운 해킹 되세요!