Databases with SQLite and SQLAlchemy Included


SQLite

많이 사용되는 데이터베이스. 파이썬에 기본적으로 포함되어 있을 정도로 인기가 높음

3


  • cursor = db.cursor() : 데이터베이스를 제어(마우스포인터)
    엑셀이나 구글 시트에서 작업하는 경우 커서를 사용하여 데이터 행을 추가하거나 데이터를 편집/삭제하며, SQ 라이트 데이터베이스를 수정할 때도 커서가 필요



데이터베이스 표 만들기

cursor.execute("CREATE TABLE books (id INTEGER PRIMARY KEY, title varchar(250) NOT NULL UNIQUE, author varchar(250) NOT NULL, rating FLOAT NOT NULL)")
  • cursor : 데이터베이스의 마우스 포인터로서 모든 작업을 수행

  • .execute() : 커서가 작업을 실행하도록 명령. SQ 라이트 데이터베이스의 모든 작업은 구조화 질의어(SQL, Structured Query Language)라는 명령어로 표현되는데, 이는 키워드가 모두 대문자로 쓰인 영어 문장과 비슷함 CREATE TABLE : 데이터베이스에 새 표를 생성하는 키워드로 이 뒤에 표 이름이 오게 됨

📑관련 문서

books :  생성 중인 새 표에 부여한 이름

() :  CREATE TABLE books ( ) 괄호 안에 들어가는 부분은 이 표의 필드, 또는 엑셀 시트의 열 제목


실행시

1


2


  • SQL쿼리는 오타에 매우 민감함.
    ⇨ SQL알케미(SQLAlchemy)도구를 사용하여 파이썬 코드를 작성



SQLAlchemy

  • 객체 관계형 매핑(ORM, Object Relational Mapping) 라이브러리
    데이터베이스의 관계를 객체에 매핑할 수 있다
    필드는 객체 속성이 되고,
    표는 별도의 클래스,
    데이터의 각 행은 새 개체로 정의

🛠️ from flask_sqlalchemy import SQLAlchemy 설치 후에도 빨간줄 떴을 때

터미널에
`pip uninstall Flask_SQLAlchemy`
`pip install Flask_SQLAlchemy`


예시

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

##CREATE DATABASE
app.config['SQLALCHEMY_DATABASE_URI'] = "sqlite:///new-books-collection.db"
# Optional: But it will silence the deprecation warning in the console.
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)


##CREATE TABLE
class Book(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(250), unique=True, nullable=False)
    author = db.Column(db.String(250), nullable=False)
    rating = db.Column(db.Float, nullable=False)

    # Optional: this will allow each book object to be identified by its title when printed.
    def __repr__(self):
        return f'<Book {self.title}>'


with app.app_context():
    db.create_all()

# CREATE RECORD
    new_book = Book(id=1, title="Harry Potter", author="J. K. Rowling", rating=9.3)
    db.session.add(new_book)
    db.session.commit()



SQLAlchemy를 사용한 CRUD작업

모든 레코드 읽기

all_books = session.query(Book).all()


쿼리별 특정 레코드 읽기

book = Book.query.filter_by(title="Harry Potter").first()


쿼리별 레코드 업데이트하기

book_to_update = Book.query.filter_by(title="Harry Potter").first()
book_to_update.title = "Harry Potter and the Chamber of Secrets"
db.session.commit()


기본키로 레코드 업데이트하기

book_id = 1
book_to_update = Book.query.get(book_id)
book_to_update.title = "Harry Potter and the Goblet of Fire"
db.session.commit() 


기본키로 특정 레코드 삭제하기

book_id = 1
book_to_delete = Book.query.get(book_id)
db.session.delete(book_to_delete)
db.session.commit()


💡

with app.app_context():
    db.create_all()


4