Flask의 SQLAlchemy 사용 강좌...

7233 단어
Flask는python 웹 마이크로프레임워크입니다.이른바 마이크로 프레임워크란 주로 flask가 간결하고 가볍고 사용자 정의 정도가 높다.django보다 경량급이야.그동안 django를 괴롭혔는데 django의 ORM 모드가 잘 사용되고 손이 간단하며 사용이 편리한 덕분이다.Flask 안에 원생의 orm이 없기 때문에 제3자의 라이브러리를 사용해야 한다. 이름이 가장 높은 SQLALchemy는 ORM을 실현하는 라이브러리이다.다음은 Flask에서 sqlchemy를 어떻게 사용하는지 간단히 소개합니다.Flask에서 SQLAlchemy 사용 설명서 참조
SQLAlchemy 확장자를 설치하여 셸 명령에 입력
pip install sqlchemy

설치 성공 여부를 테스트합니다.
import sqlchemy
sqlchemy.__version__ # 0.10.1

오류 메시지가 없으면 설치가 완료되었습니다.
이현식 호출이라는 디스플레이 호출은 sqlchemy와python class를 조작하지 않고 코드로 직접 완성하는 것입니다.sqlchemy의 상세한 사용에 관하여 다른 블로그를 소개합니다.sqlchemy 사용 강좌를 이동합니다.새 flask 프로젝트를 만듭니다.프로젝트 구조는 다음과 같습니다.
(env)ghost@ghost-H61M-S2V-B3:~/project/flask/fsqlauto$ tree
.
├── app.py
├── database.py
├── models.py
├── static
└── templates
                                  
2 directories, 3 files

우리는 먼저 데이터베이스 연결을 정의하고 데이터베이스를 조작합니다.py
# -*- coding: utf-8 -*-
                                                                
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
                                                                
engine = create_engine('sqlite:///./test.db', convert_unicode=True) #        (             ) 
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()
                                                                
def init_db():
    #                     ,         
    #   metadata    。  ,            init_db()  
    #      。
    import models
    Base.metadata.create_all(bind=engine)

init_db 방법으로 데이터베이스를 만들고 모델스를 정의합니다.py
# -*- coding: utf-8 -*-
                                                              
from sqlalchemy import Column, Integer, String
from database import Base
                                                              
class User(Base):
    __tablename__ = 'users'
                                                              
    id = Column(Integer, primary_key=True)
    name = Column(String(50), unique=True)
    email = Column(String(120), unique=True)
                                                              
    def __init__(self, name=None, email=None):
        self.name = name
        self.email = email
                                                              
    def __repr__(self):
        return '%s (%r, %r)' % (self.__class__.__name__, self.name, self.email)

python class를 정의했습니다. 실제로는users표에 비추었습니다.마지막으로 저희 프로그램 메인 입구입니다.
# -*- coding: utf-8 -*-
                                                            
from flask import Flask
from database import init_db, db_session
from models import User
                                                            
app = Flask(__name__)
                                                            
@app.teardown_request
def shutdown_session(exception=None):
    db_session.remove()
                                                            
                                                            
@app.route('/')
def index():
    return 'hello world flask'
                                                            
@app.route('/add//')
def add(name, email):
    u = User(name=name, email=email)
    try:
        db_session.add(u)
        db_session.commit()
    except Exception, e:
        return 'wrong'
    return 'Add %s user successfully' % name
                                                            
@app.route('/get/')
def get(name):
    try:
        u = User.query.filter(User.name==name).first()
    except Exception, e:
        return 'there isnot %s' % name
    return 'hello %s' % u.name
                                                            
if __name__ == '__main__':
    init_db()
    app.debug = True
    app.run()

@app를 정의했습니다.teardown_request 장식기.조회가 끝난 후 데이터베이스를 닫으면 구체적으로flask 문서 데이터베이스를 참고할 수 있습니다.여기 메인 방법 중 initdb는 주로 데이터베이스를 초기화하고 데이터베이스가 존재하면 링크를 통해 읽습니다.dd는 데이터베이스에 기록을 추가하는 방법입니다. get은 바로 데이터베이스 조회입니다. 더 많은 예는 sqlchemy 강좌를 참고하십시오.
3수동 ORM 위쪽은 자동 orm입니다. 만약에 수동이라면 해당하는 파일은 다음과 같이 수정됩니다. 데이터베이스.py
# -*- coding: utf-8 -*-
                           
from sqlalchemy import create_engine, MetaData
from sqlalchemy.orm import scoped_session, sessionmaker
                           
                           
engine = create_engine('sqlite:///./test.db', convert_unicode=True)
metadata = MetaData()
db_session = scoped_session(sessionmaker(autocommit=False,
                                        autoflush=False,
                                        bind=engine))
                           
                           
def init_db():
    metadata.create_all(bind=engine)

models.py
from sqlalchemy import Table, Column, Integer, String
from sqlalchemy.orm import mapper
from database import metadata, db_session
                          
class User(object):
                          
    query = db_session.query_property()
                          
    def __init__(self, name=None, email=None):
        self.name = name
        self.email = email
                          
    def __repr__(self):
        return '' % (self.name)
                          
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(50), unique=True),
    Column('email', String(120), unique=True)
)
                          
mapper(User, users)

모델은 수동으로 테이블을 정의하고 맵을 지정해야 합니다.py
# -*- coding: utf-8 -*-
                    
import sqlite3
from flask import Flask
from database import *
from models import *
                    
app = Flask(__name__)
                    
                    
@app.teardown_request
def teardown_request(exception=None):
    db_session.remove()
                    
@app.route('/')
def index():
    return 'hello'
                    
@app.route('/add//')
def add(name, email):
    u = User(name, email)
    try:
        db_session.add(u)    
        db_session.commit()  
    except Exception, e:
        return 'wrong'
                          
    return '%s add successful' % name
                    
@app.route('/get/')
def get(name):
    try:
        u = User.query.filter(User.name==name).first()
    except Exception, e:
        return 'there isnot %s' % name
    return 'hello %s' % u.name
                                                   
                    
if __name__ == '__main__':
    init_db()
    app.debug = True
    app.run()

더 밑바닥의 조작은flask app에 sql 조회를 쓰는 것이다. 구체적으로는 sqlalchemy 사용 방법과 일치한다.
주: 본문 전재http://rsj217.diandian.com/post/2014-01-09/40060722735

좋은 웹페이지 즐겨찾기