질문이 있으십니까?

기본 컨텐츠 및 사용자가 직접 참여하여 만들어진 다양한 내용을 검색합니다.

ORM 분야의 SQLAlchemy

설치

sudo pip3 install sqlalchemy
sudo pip3 install flask-sqlalchemy

Flask에서 사용

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = "Secret Key"
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///crud.db' #'mysql://root:''@localhost/crud'
app.config['SQlALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)
db.init_app(app)

CREATE TABLE

class Article(db.Model):
    # db.Model을 상속받으면 db.Column()이라는 메소드를 사용가능함.
    __tablename__ = "articles"
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String, nullable=False)
    content = db.Column(db.String, nullable=False)
    author = db.Column(db.String, nullable=False)
    created_at = db.Column(db.String, nullable=False)
      
db.create_all() # 이렇게 만든 테이블을 다 생성해봐라.

INSERT

# ORM을 이용하여 데이터를 저장한다.
title = request.args.get('title')
content = request.args.get('content')
a = Article(title=title,content=content) # Article이라는 객체 생성
db.session.add(a) # 생성한 객체를 디비에 넣어라.
db.session.commit() # commit

SELECT

article = Article.query.all()
# SELECT * FROM articles와 동일함
# 이렇게 뽑힌 것들은 객체들의 리스트가 된다.
# [<article1>, <article2>, ...]
# 따라서 객체의 원소를 참조하려면 멤버변수를 통해서 들고와야한다!

WHERE

a = Article.query.filter_by(title="제목인가요?").all()
a = Article.query.filter_by(id=28).first()
# SELECT * FROM articles WHERE id=28 LIMIT 1과 동일한 문법
a = Article.query.get(28) # 이렇게 간단하게도 줄여쓸 수 있다!

DELETE

a = Article.query.get(28)
db.session.delete(a)
db.session.commit()
# 삭제할 객체를 찾는다 -> 객체를 제거한다

UPDATE

a.title = "Good Title!"
# 각 row가 인스턴스이기 때문에 클래스의 멤버변수에 직접 접근해서 바꾸면 됩니다.
db.session.commit() # 반드시 커밋!

기타 함수들

# COUNT
# SELECT COUNT(*) FROM articles
Article.query.count()

# MAX
a = Article.query.order_by(Article.id.desc()).first()

# 특정 칼럼만 뽑을 때
a = Article.query.with_entities(Article.title).all()
# [(title1,),(title2,),...]

댓글을 작성하세요

문서 이력

  • 2020-08-15 날짜로 관리자 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-08-18 날짜로 배성현 님께서 등록 작업을 하였습니다.
  • 2020-08-19 날짜로 배성현 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-08-19 날짜로 배성현 님으로 부터 컨텐츠명이 변경 되었습니다.
  • 2020-08-19 날짜로 배성현 님으로 부터 컨텐츠명이 변경 되었습니다.