Flask SQLAlchemy & model

Flask-SQLAlchemy

Flask-SQLAlchemy庫讓flask更方便的使用SQLALchemy,是一個強大的關係形數據庫框架,既能夠使用orm方式操做數據庫,也能夠使用原始的SQL命令.mysql

須要安裝的包

MySQLsql

SQLAlchemy數據庫

Flask-SQLAlchemyflask

mysqlclientsession

配置Flask-SQLAlchemy

示例:app

MySQL:框架

mysql://username:password@hostname/database函數

 

定義模型

from sqlalchemy import Column, Integer, MetaData, VARCHAR
from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app = Flask(__name__)

#配置數據庫地址
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:wjjf2008@127.0.0.1:3306/internet_plus?charset=utf8'
#該配置爲True,則每次請求結束都會自動commit數據庫的變更
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

db = SQLAlchemy(app)
#也能夠db = SQLAlchemy()        db.init_app(app)


class User(db.Model): #使用繼承至db.Model的類來定義模型
    __tablename__ = 'User'  #if use Declarative,tablename is needed
    user_id = db.Column('user_id', db.Integer, autoincrement=True, primary_key = True)
    user_name = db.Column('user_name', db.VARCHAR(20), nullable=False, unique=True, default='')
    user_phone = db.Column('user_phone', db.VARCHAR(20), nullable=False, default='')
    user_email = db.Column('user_email', db.VARCHAR(30), nullable=False, default='')

    def __repr__(self):
        return '<User %r>' % self.user_name

if __name__ == '__main__':
    db.create_all() #建立數據庫

 

經常使用字段選項:fetch

  primary_key 設置主鍵spa

  unique 是否惟一

  index 是否建立索引

  nullable 是否容許爲空

  default 設置默認值,能夠傳入函數的引用 如傳入 datetime.datetime.utcnow 則每次建立時時間都是最新時間

數據庫操做

  • 插入數據
from models2 import User, db
from flask_sqlalchemy import SQLAlchemy

#創建一個新用戶
u = User();
u.user_name = 'Jeffrey'
u.user_phone = '15958360766'
u.user_email = '729957621@qq.com'
#將用戶添加到數據庫會話中
db.session.add(u)
#將數據庫會話中的變更提交到數據庫中,若是不Commit,數據庫中是沒有改動的
db.session.commit()

 

  • 查找數據
#返回全部用戶保存到list中
user_list = User.query.all()

#查找username爲abc的第一個用戶,返回用戶實例
user_list = User.query.filter_by(user_name='Jeffrey').first()

 

  • 刪除數據
u = User.query.first()
db.session.delete(u)
db.session.commit()

 

  • 修改數據
u = User.query.first()
u.username = 'sb'
db.session.commit()

 

 另外一種使用數據庫的方法

from sqlalchemy import Column, Integer, MetaData, VARCHAR
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from flask.ext.sqlalchemy import SQLAlchemy

metadata = MetaData()
Base = declarative_base(metadata=metadata)
db = 'mysql://root:mysqlpassword@127.0.0.1:3306/dbname?charset=utf8'

def get_session(): #此處返回一個session
    #create_engine() 會返回一個數據庫引擎,echo 參數爲 True 時,會顯示每條執行的 SQL 語句,生產環境下可關閉。
    engine = create_engine(db, encoding="utf-8")
    #sessionmaker() 會生成一個數據庫會話類。這個類的實例能夠當成一個數據庫鏈接,它同時還記錄了一些查詢的數據,並決定何時執行 SQL 語句。
    mysql_session_maker = sessionmaker(bind=engine)
    session = mysql_session_maker()
    '''
    # 拿到 session 後,就能夠執行 SQL 了
    session.execute('create database abc')
    print(session.execute('show databases').fetchall())
    session.execute('use abc')
    # 建 user 表的過程略
    print
    session.execute('select * from user where id = 1').first()
    print
    session.execute('select * from user where id = :id', {'id': 1}).first()
    '''
    return session

sql_session = get_session()


class User(Base):
    __tablename__ = 'User'  #if use Declarative,tablename is needed
    user_id = Column('user_id', Integer, autoincrement=True, primary_key = True)
    user_name = Column('user_name', VARCHAR(20), nullable=False, unique=True, default='')
    user_phone = Column('user_phone', VARCHAR(20), nullable=False, default='')
    user_email = Column('user_email', VARCHAR(30), nullable=False, default='')

if __name__ == '__main__':
    #定義一個表
    engine = create_engine(db, encoding="utf-8", echo=True)
    Base.metadata.create_all(engine)
    print(sql_session.query(User).count())

 Flask官方文檔:http://docs.jinkan.org/docs/flask/

相關文章
相關標籤/搜索