Flask-SQLAlchemy庫讓flask更方便的使用SQLALchemy,是一個強大的關係形數據庫框架,既能夠使用orm方式操做數據庫,也能夠使用原始的SQL命令.mysql
MySQLsql
SQLAlchemy數據庫
Flask-SQLAlchemyflask
mysqlclientsession
示例: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/