SQLAlchemy:python
1.因爲sqlalchemy中沒有提供choice方法,因此藉助SQLAlchemy-Utils組件提供的choice方法mysql
from sqlalchemy_utils import ChoiceTypesql
Base = declarative_base()數據庫
class Xuan(Base):flask
__tablename__ = 'xuan'安全
types_choices = (session
(1,'歐美'),app
(2,'日韓'),ide
(3,'老男孩'),函數
)
id = Column(Integer,primary_key=True,autoincrement=True)
name = Column(String(64))
types = Column(ChoiceType(types_choices,Integer()))
__table_args__ = {
'mysql_engine':'Innodb',
'mysql_charset':'utf8',
}
2.scoped_session:
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session
SessionFactory = sessionmaker(bind=engine)
# 方式一:因爲沒法提供線程共享功能,全部在開發時要注意,在每一個線程中本身建立 session。
# from sqlalchemy.orm.session import Session
# 本身具備操做數據庫的:'close', 'commit', 'connection', 'delete', 'execute', 'expire',.....
session = SessionFactory()
# print('原生session',session)
# 操做
session.close()
# 方式二:支持線程安全,爲每一個線程建立一個session
# - threading.Local
# - 惟一標識
# ScopedSession對象
# self.registry(), 加括號 建立session
# self.registry(), 加括號 建立session
# self.registry(), 加括號 建立session
from greenlet import getcurrent as get_ident
session = scoped_session(SessionFactory,get_ident)
# session.add
# 操做
session.remove()
3.Flask-SQLAlchemy Flask-Migrate
Flask-SQLAlchemy:吧Flask和SQLAlchemy結合在一塊兒,粘合劑
在__init__.py 文件中
1 引入Flask-SQLAlchemy 中的SQLAlchemy,實例化了一個SQLAlchemy對象
2 註冊Flask-SQLAlchemy:
- 有兩種方式
方式一: 在函數裏面,SQLAlchemy(app) #若是想在其餘地方使用這種方式就很差使了
方式二: 在全局:
db = SQLAlchemy(),
在函數裏面 db.init_app(app) #調用init_app方法吧app放進去了
三、導入models的類
四、導入的類中繼承了db.model,其實本質上仍是繼承了Base類
五、manage.py 建立數據庫表,能夠經過命令來建立。藉助Flask-Migrate組件來完成
Flask-Migrate:
-舊5 被斃掉了:在manage.py裏面導入db,之後執行db.create_all()建立表,之後執行drop_all()刪除表
這樣很差,咱們能夠和Flask-Migrate結合起來用
-新5:Flask-Migrate
- 安裝組件:pip install Flask-Migrate
- 5.1 導入
from flask_migrate import Migrate, MigrateCommand
from app import db, app
- 5.2 migrate = Migrate(app,db) #建立實例
- 5.3 建立命令
manager.add_command("db",MigrateCommand)
- 5.4 執行命令
python manage.py db init #只執行第一次
python manage.py db migrate
python manage.py db upgrade
在執行命令以前,得先鏈接數據庫,他纔會知道吧表放在那裏,
from flask_sqlalchemy import SQLAlchemy
from flask import FLask
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
db.init_app(app)
return app
全部用過的組件
Flask
鏈接數據庫的兩種操做
要麼DBUtils:用於執行原生SQL的
用本身的util裏面的sqlhelper來完成
要麼SQLAlchemy:遵循他本身的語法來連接
方式一:SQLAlchemy(app)這種方式有侷限性,若是我在其餘地方也得用到呢?能夠吧它寫到全局
方式二:優勢,
實例化一下:db = SQLAlchemy()
註冊:
在settings裏面配置一下數據庫連接方式
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://root:123@47.93.4.198:3306/s6?charset=utf8"
SQLALCHEMY_POOL_SIZE = 2
SQLALCHEMY_POOL_TIMEOUT = 30
SQLALCHEMY_POOL_RECYCLE = -1
Flask-SQLAlchemy: db.init_app(app)
Flask-Session #用於吧session保存在其餘地方
Flask-Script #生成命令
Flask-Migrate #數據庫遷移
Flask-SQLAlchemy #將Flask和SQLAlchemy很好的結合在一塊兒
#本質、:每次操做數據庫就會自動建立一個session鏈接,完了自動關閉
Blinker #信號
Wtforms #FORM組件
用到的組件和版本
pip3 freeze #獲取環境中全部安裝的模塊
pip3 freeze > a.txt
pip3 freeze > requirements.txt
#pip3 install pipreqs #幫你找到當前程序的全部模塊,而且自動生成 requirements.txt文件,寫入內容
pipreqs ./ #根目錄
之後別人給你一個程序,告知你一個文件夾須要安裝的組件:requirements.txt
進入程序目錄:
pip install -r requirements.txt #就會把設計到的全部的組件就會裝上
結構:
app
static
templates
views
__init__.py
models.py