파이썬코딩

파이썬코드 Db-api sqlite mysql

DB-API 

 

API(응용 프로그램 프로그래밍 인터페이스)는 일부 서비스에 액세스하기 위해 호출할 수 있는 함수 집합입니다. DB-API는 관계형 데이터베이스에 액세스하기 위한 Python의 표준 API입니다. 이를 사용하여 각 데이터베이스에 대해 별도의 프로그램을 작성하는 대신 여러 종류의 관계형 데이터베이스에서 작동하는 단일 프로그램을 작성할 수 있습니다. 그것은 자바의 JDBC나 펄의 dbi와 비슷하다.

주요 기능은 다음과 같습니다.

연결하다

데이터베이스에 연결합니다. 사용자 이름, 암호, 서버 주소 등의 인수를 포함할 수 있습니다.

 

커서가 있는

쿼리를 관리할 커서 개체를 만듭니다. 사형 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행 집행.

데이터베이스에 대해 하나 이상의 SQL 명령을 실행합니다.

fetchone() , fetchmany() 및 fetchall() 실행에서 결과를 가져옵니다.

다음 절의 Python 데이터베이스 모듈은 DB-API를 준수하며, 종종 확장과 세부 사항의 일부 차이점이 있습니다.

 

SQLite

SQLite는 우수하고 가벼운 오픈 소스 관계형 데이터베이스입니다. 표준 파이썬 라이브러리로 구현되며 데이터베이스를 일반 파일에 저장합니다. 이 파일들은 ma ch chines 및 운영 체제 간에 이동 가능하므로 SQLite는 단순한 관계형 데이터베이스 애플리케이션을 위한 매우 휴대성이 뛰어난 솔루션이 됩니다. MySQL 또는 Postgre만큼 완벽한 기능은 아닙니다.SQL은 지원하지만 여러 명의 동시 사용자를 관리합니다. 웹 브라우저, 스마트폰 및 기타 응용 프로그램은 SQLite를 내장 데이터베이스로 사용합니다.

사용 또는 작성할 로컬 SQLite 데이터베이스 파일에 대한 연결()로 시작합니다. 이 파일은 부모가 다른 서버에 있는 테이블로 사용하는 디렉토리와 같은 데이터베이스와 동일합니다. 특수 문자열 ':memory:'는 메모리에만 데이터베이스를 만듭니다. 이 문자열은 빠르고 테스트에 유용하지만 프로그램이 종료되거나 컴퓨터가 다운되면 데이터가 손실됩니다.

 

다음 예로, 번창하는 길가 애완 동물원의 사업을 관리하기 위해 Enterprise.db라는 데이터베이스와 테이블 동물원(table zoo)을 만들어 보겠습니다. 테이블 열은 다음과 같습니다.

생물의 가변 길이 문자열 및 기본 키

수를 세다

이 동물에 대한 현재 재고의 정수 개수

손해

현재 동물과 인간의 상호작용으로 인한 손실의 액수입니다.

 

>>> import sqlite3
>>> conn = sqlite3.connect('enterprise.db') >>> curs = conn.cursor()
>>> curs.execute('''CREATE TABLE zoo 

        (critter VARCHAR(20) PRIMARY KEY,

         count INT,

         damages FLOAT)''')

<sqlite3.Cursor object at 0x1006a22d0>

Python의 삼중따옴표는 SQL 쿼리와 같은 긴 문자열을 만들 때 유용합니다.

 

이제 동물원에 동물을 추가하세요.

 

 >>> curs.execute('INSERT INTO zoo VALUES("duck", 5, 0.0)')

    <sqlite3.Cursor object at 0x1006a22d0>

    >>> curs.execute('INSERT INTO zoo VALUES("bear", 2, 1000.0)')

    <sqlite3.Cursor object at 0x1006a22d0>

 

자리 표시자를 사용하여 데이터를 더 안전하게 삽입할 수 있습니다.

 

  >>> ins = 'INSERT INTO zoo (critter, count, damages) VALUES(?, ?, ?)'

    >>> curs.execute(ins, ('weasel', 1, 2000.0))

    <sqlite3.Cursor object at 0x1006a22d0>

 

이번에는 SQL에 물음표 3개를 사용하여 3개의 값을 삽입한 다음 이 3개의 값을 목록으로 실행() 함수에 전달할 계획임을 나타냅니다. 보험 계약자는 인용과 같은 지루한 세부 사항을 처리합니다. SQL 주입으로부터 사용자를 보호합니다. SQL 주입은 웹에서 일반적으로 시스템에 악의적인 SQL 명령을 삽입하는 외부 공격입니다.

이제, 우리가 우리의 모든 동물들을 다시 꺼낼 수 있는지 봅시다.

 

>>> curs.execute('SELECT * FROM zoo') <sqlite3.Cursor object at 0x1006a22d0> >>> rows = curs.fetchall()
>>> print(rows) 

[('duck', 5, 0.0), ('bear', 2, 1000.0), ('weasel', 1, 2000.0)] 

다시 불러오죠. 하지만 숫자대로 정렬합니다.

 

  >>> curs.execute('SELECT * from zoo ORDER BY count')

    <sqlite3.Cursor object at 0x1006a22d0>

    >>> curs.fetchall()

    [('weasel', 1, 2000.0), ('bear', 2, 1000.0), ('duck', 5, 0.0)]

 

이봐, 우린 내림차순으로 원했어.

   >>> curs.execute('SELECT * from zoo ORDER BY count DESC')

    <sqlite3.Cursor object at 0x1006a22d0>

    >>> curs.fetchall()

    [('duck', 5, 0.0), ('bear', 2, 1000.0), ('weasel', 1, 2000.0)]

 

어떤 종류의 동물이 가장 비용이 많이 드나요?

 

 >>> curs.execute('''SELECT * FROM zoo WHERE

    ...     damages = (SELECT MAX(damages) FROM zoo)''')

    <sqlite3.Cursor object at 0x1006a22d0>

    >>> curs.fetchall()

    [('weasel', 1, 2000.0)]

 

여러분은 곰들이라고 생각했을 것입니다. 항상 실제 데이터를 확인하는 것이 가장 좋습니다.

SQLite를 떠나기 전에 정리를 해야 합니다. 연결과 커서를 연 경우 작업이 완료되면 커서를 닫아야 합니다.

 

    >>> curs.close()

    >>> conn.close()

 

MySQL

MySQL은 매우 널리 사용되는 오픈 소스 관계형 데이터베이스입니다. SQLite와 달리 실제 서버이므로 클라이언트가 네트워크상의 다른 장치에서 액세스할 수 있습니다.

MysqlDB는 가장 인기 있는 MySQL 드라이버였지만 아직 파이썬 3으로 포팅되지는 않았다. 표 8-3에는 파이썬에서 MySQL에 액세스하는 데 사용할 수 있는 드라이버가 나와 있습니다.

표 8-3. MySQL 드라이버

 

MySQL Connector PYMySQL
oursql 

Link 

http://bit.ly/mysql-cpdg 

https://github.com/petehunt/ PyMySQL/ 

http://pythonhosted.org/oursql/ 

Pypi package Import as 

mysql-connector- mysql.connector python 

Notes 

Requires the MySQL C client libraries. 

 

PostgreSQl

링크

http://bit.ly/mysql-cpdg

https://github.com/petehunt/ PyMySQL/

http://pythonhosted.org/oursql/

Pypi 패키지 가져오기 위치

mysql-sql.mysql.mysql

메모들

MySQL C 클라이언트 라이브러리가 필요합니다.

Pymysql usql

pymysql

usql

포스트그레SQL은 MySQL보다 여러 면에서 더 많은 이점을 제공하는 완전한 기능의 오픈 소스 관계형 데이터베이스입니다. 표 8-4는 Python 드라이버에 액세스하는 데 사용할 수 있는 드라이버를 보여줍니다.

포스트그레SQL 드라이버

 

가장 인기 있는 드라이버는 psycopg2이지만 Postgre를 설치해야 한다.SQL 클라이언트 라이브러리.

 

SQLArchemy

SQL은 모든 관계형 데이터베이스에 대해 완전히 동일하지는 않으며 DB-API는 지금까지만 지원합니다. 각 데이터베이스는 그 특징과 철학을 반영하는 특정한 방언을 구현한다. 많은 도서관들이 이런 차이점들을 어떻게든 메우려고 노력한다. 가장 널리 사용되는 데이터베이스 간 파이썬 라이브러리는 SQLArchemy입니다.

그것은 표준 도서관에는 없지만, 많은 사람들에 의해 잘 알려져 있고 사용되고 있습니다. 다음 명령을 사용하여 시스템에 설치할 수 있습니다.

 

$ pip install sqlalchemy

• 가장 낮은 수준은 데이터베이스 연결 풀, SQL 명령 실행 및 결과 반환을 처리합니다. DB-API에 가장 가깝습니다.

 

• 다음은 SQL 표현 언어인 Pythonic SQL Builder입니다.

 

• 가장 높은 계층은 SQL 식을 사용하는 ORM(Object Relational Model) 계층입니다.

 

언어 및 관계형 데이터 구조와 응용 프로그램 코드를 바인딩합니다.

계속 진행하면서 이러한 수준의 용어가 무엇을 의미하는지 이해하게 될 것입니다. SQLArchemy는 이전 절에 설명된 데이터베이스 드라이버와 함께 작동합니다. 드라이버를 가져올 필요가 없습니다. SQLLCemy에 제공한 초기 연결 문자열이 드라이버를 결정합니다. 이 문자열은 다음과 같습니다.

 

  • dialect + driver :// user : password @ host : port / dbname

이 문자열에 입력한 값은 다음과 같습니다.

사투리를 쓰다

데이터베이스 유형

운전사의

해당 데이터베이스에 사용할 특정 드라이버

사용자 및 암호

데이터베이스 인증 문자열

숙주와 항구

데이터베이스 서버의 위치(: 이 서버의 표준 포트가 아닌 경우에만 필요)

dbname

서버에서 처음 연결할 데이터베이스

 

  • Table 8-5 lists the dialects and drivers.
    Table 8-5. SQLAlchemy connection

dialect 

sqlite

mysql

mysql

mysql

postgresql

postgresql

driver 

pysqlite (or omit) mysqlconnector pymysql
oursql psycopg2 pypostgresql 

엔진 층

먼저, 기본 DB- API 기능보다 조금 더 낮은 수준의 SQLlchemy를 사용해 보겠습니다.

파이썬에 이미 내장된 SQLite를 사용해 보겠습니다. SQLite에 대한 연결 문자열이 호스트, 포트, 사용자 및 암호를 건너뜁니다. dbname은 데이터베이스를 저장하는 데 사용할 파일을 SQLite에 알려줍니다. dbname을 생략하면 SQLite는 메모리에 데이터베이스를 작성합니다. dbname이 슬래시(/)로 시작하는 경우 컴퓨터의 절대 파일 이름입니다(예: Windows의 C:\\). 그렇지 않으면 현재 디렉토리와 관련이 있습니다.

다음 세그먼트는 설명을 위해 여기에서 분리된 한 프로그램의 모든 부분입니다.

먼저 필요한 것을 가져오셔야 합니다. 다음은 문자열 sa를 사용하여 SQLLCemy 메서드를 참조할 수 있는 가져오기 별칭의 예입니다. 주로 sa가 sqlalchemy보다 훨씬 쉽게 입력되기 때문에 이 작업을 수행합니다.

 

>>> import sqlalchemy as sa

데이터베이스에 연결하고 메모리에 데이터베이스에 대한 저장소 만들기(인수 문자열)

'sqlite://:memory:'도 작동합니다.

 

>>> conn = sa.create_engine('sqlite://') 

다음과 같은 세 개의 열로 구성된 zoo라는 데이터베이스 테이블을 만듭니다.

 

>>> conn.execute('''CREATE TABLE zoo 

...

...

...

<sqlalchemy.engine.result.ResultProxy object at 0x1017efb10>

 

conn.execute()를 실행하면 ResultProxy라는 SQLLCemy 개체를 반환합니다. 너는 곧 그것을 어떻게 해야 할지 알게 될 것이다.

그나저나, 데이터베이스 표를 만들어 본 적이 없다면 축하드립니다. 버킷 리스트에서 하나를 체크하세요.

이제 비어 있는 새 테이블에 세 가지 데이터 세트를 삽입합니다.

 

    >>> ins = 'INSERT INTO zoo (critter, count, damages) VALUES (?, ?, ?)'

    >>> conn.execute(ins, 'duck', 10, 0.0)

    <sqlalchemy.engine.result.ResultProxy object at 0x1017efb50>

    >>> conn.execute(ins, 'bear', 2, 1000.0)

    <sqlalchemy.engine.result.ResultProxy object at 0x1017ef090>

    >>> conn.execute(ins, 'weasel', 1, 2000.0)

    <sqlalchemy.engine.result.ResultProxy object at 0x1017ef450>

 

그런 다음 데이터베이스에 방금 입력한 모든 내용을 요청하십시오.

    >>> rows = conn.execute('SELECT * FROM zoo')

 

SQLArchemy에서 행은 목록이 아니라 직접 인쇄할 수 없는 특별한 ResultProxy입니다.

 

>>> print(rows)
<sqlalchemy.engine.result.ResultProxy object at 0x1017ef9d0> 

그러나 목록처럼 반복할 수 있으므로 한 번에 다음 행을 얻을 수 있습니다.

 

>>> for row in rows: ... print(row) ...
('duck', 10, 0.0) ('bear', 2, 1000.0) ('weasel', 1, 2000.0) 

앞에서 보신 SQLite DB-API 예제와 거의 동일합니다. 한 가지 장점은 맨 위에 있는 데이터베이스 드라이버를 가져올 필요가 없다는 것입니다. SQLArchemy는 연결 문자열에서 이를 알아냈습니다. 연결 문자열을 변경하면 이 코드가 다른 유형의 데이터베이스로 이동될 수 있습니다. 또 다른 장점은 SQLlchemy의 연결 풀링이며, 이 풀링은 설명서 사이트에서 확인할 수 있습니다.