標籤:import index 建構函式 file email 功能 解決 輕量 後台
SQLAlchemy 是一個很強大的關係型資料庫架構, 支援多種資料庫後台。 提供了高層 ORM,也提供了使用資料庫原生 SQL 的低層功能。
安裝Flask-SQLAlchemy
&emsp&emsp首先,啟用virtualenv虛擬環境,在虛擬環境安裝目錄的同級目錄下使用命令
venv\Scripts\activate
命令列前出現virtualenv 則表示啟用成功
&emsp&emsp然後,安裝Flask-SQLAlchemy
pip install flask-sqlalchemy
配置SQLite資料庫
from flask.ext.sqlalchemy import SQLAlchemybasedir = os.path.abspath(os.path.dirname(__file__))app = Flask(__name__)app.config[‘SQLALCHEMY_DATABASE_URI‘] =‘sqlite:///‘ + os.path.join(basedir, ‘data.sqlite‘)app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = Truedb = SQLAlchemy(app)
db 對象:是 SQLAlchemy 類的執行個體,表示程式使用的資料庫,同時還獲得了 Flask-SQLAlchemy
提供的所有功能。
SQLALCHEMY_DATABASE_URI :程式使用的資料庫 URL
SQLALCHEMY_COMMIT_ON_TEARDOWN:將其設為 True 時,每次請求結束後都會自動認可資料庫中的變動
定義模型
在 ORM 中,模型一般是一個 Python 類,類中的屬性對應資料庫表中的列。
class User(db.Model): __tablename__ = ‘users‘ id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, index=True) def __repr__(self): return ‘<User %r>‘ % self.username
__tablename__:定義在資料庫中使用的表名。如果沒有定義 tablename,Flask-SQLAlchemy 會使用一個預設名字。
其餘的類變數都是該模型的屬性,被定義為 db.Column類的執行個體。db.Column 類建構函式的第一個參數是資料庫列和模型屬性的類型。
操作資料庫建立表
讓 Flask-SQLAlchemy 根據模型類建立資料庫。方法是使用 db.create_all() 函數:
(venv) $ python hello.py shell>>> from hello import db>>> db.create_all()
查看程式目錄,會發現建立了一個名為 data.sqlite 的檔案。如果資料庫表已經存在於資料庫中,那麼 db.create_all()不會重新建立或者更新這個表。如果修改模型後要把改動應用到現有的資料庫中,這一特性會帶來不便。粗暴的解決方式是先刪除再重建使用>>> db.drop_all()和>>> db.create_all(),資料庫裡的資料也會被刪除。所以使用Flask-Migrate外掛程式,這個外掛程式對資料庫遷移架構Alembic 做了輕量級封裝,並整合到 Flask-Script 中,所有操作都通過 Flask-Script 命令完成。接下來的操作前提是安裝並使用了Flask-Migrate。
查詢
模型名.query.all()取對應表中的所有記錄:
>>> User.query.al[<User u‘john‘>]
可通過查看原生語句查看該表的欄位
>>> str(User.query.filter_by(username=‘john‘))‘SELECT users.id AS users_id, users.email AS users_email, users.username AS users_username, users.role_id AS users_role_id, users.password_hash AS users_password_hash, users.confirmed AS users_confirmed \nFROM users \nWHERE users.username = ?‘
可以看到模型User對應的表users中的欄位有,id, email, username, role_id等
修改
先取到資料再修改然後將修改存回表中
>>> User.query.get(1)<User u‘john‘>>>> u=User.query.get(1) #取資料>>> print u.email[email protected]>>> u.email=‘[email protected]‘ #修改資料>>> db.session.add(u) #添加>>> db.session.commit() #提交修改>>> u.email #查看修改後資料u‘[email protected]‘
刪除
>>> db.session.delete(u)>>> db.session.commit()
插入行
>>> u = User(email=‘[email protected]‘, username=‘john‘, password=‘cat‘)>>> db.session.add(u)>>> db.session.commit()
使用Flask-SQLAlchemy管理資料庫