因爲sqlalchemy中沒有提供choice方法,因此藉助SQLAlchemy-Utils組件提供的choice方法python
import datetime from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, Text, ForeignKey, DateTime, UniqueConstraint, Index from sqlalchemy.orm import relationship from sqlalchemy_utils import ChoiceType Base = declarative_base() class Xuan(Base): __tablename__ = 'xuan' types_choices = ( (1,'歐美'), (2,'日韓'), (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', } engine = create_engine( "mysql+pymysql://root:123@127.0.0.1:3306/ttt2?charset=utf8", max_overflow=0, # 超過鏈接池大小外最多建立的鏈接 pool_size=5, # 鏈接池大小 pool_timeout=30, # 池中沒有線程最多等待的時間,不然報錯 pool_recycle=-1 # 多久以後對線程池中的線程進行一次鏈接的回收(重置) ) Base.metadata.create_all(engine) 查詢: result_list = session.query(Xuan).all() for item in result_list: print(item.types.code,item.types.value
from sqlalchemy.orm import sessionmaker from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session engine = create_engine( "mysql+pymysql://root:123@47.93.4.198:3306/ttt?charset=utf8", max_overflow=0, # 超過鏈接池大小外最多建立的鏈接 pool_size=5, # 鏈接池大小 pool_timeout=30, # 池中沒有線程最多等待的時間,不然報錯 pool_recycle=-1 # 多久以後對線程池中的線程進行一次鏈接的回收(重置) ) 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()
四、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放進去了 3、導入models的類 4、導入的類中繼承了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 在執行命令以前,得先鏈接數據庫,他纔會知道吧表放在那裏,
詳說註冊SQLAlchemy的兩種方式mysql
方式一sql
from flask_sqlalchemy import SQLAlchemy from flask import FLask app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = \ "mysql://root:12345@localhost/test" db = SQLAlchemy(app)
方式二數據庫
from flask_sqlalchemy import SQLAlchemy from flask import FLask db = SQLAlchemy() def create_app(): app = Flask(__name__) db.init_app(app) return app
經過上面註冊了SQLAlchemy,就直接能夠從db.session了flask
#方式一 db.session #會自動建立一個session db.session.add() db.session.query(models.User.id,models.User.name).all() db.session.commit() db.session.remove() #方式二 導入models models.User.query
全部用過的組件 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