flask sqlalchemy

 

 

Flask-SQLAlchemy 使用起來很是有趣,對於基本應用十分容易使用,而且對於大型項目易於擴展。有關完整的指南,請參閱 SQLAlchemy 的 API 文檔。html

一個最小應用

常見狀況下對於只有一個 Flask 應用,全部您須要作的事情就是建立 Flask 應用,選擇加載配置接着建立 SQLAlchemy 對象時候把 Flask 應用傳遞給它做爲參數。python

一旦建立,這個對象就包含 sqlalchemysqlalchemy.orm 中的全部函數和助手。此外它還提供一個名爲 Model 的類,用於做爲聲明模型時的 delarative 基類:sql

from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username 

爲了建立初始數據庫,只須要從交互式 Python shell 中導入 db 對象而且調用 SQLAlchemy.create_all() 方法來建立表和數據庫:shell

>>> from yourapplication import db >>> db.create_all() 

Boom, 您的數據庫已經生成。如今來建立一些用戶:數據庫

>>> from yourapplication import User >>> admin = User('admin', 'admin@example.com') >>> guest = User('guest', 'guest@example.com') 

可是它們尚未真正地寫入到數據庫中,所以讓咱們來確保它們已經寫入到數據庫中:flask

>>> db.session.add(admin) >>> db.session.add(guest) >>> db.session.commit() 

訪問數據庫中的數據也是十分簡單的:api

>>> users = User.query.all() [<User u'admin'>, <User u'guest'>] >>> admin = User.query.filter_by(username='admin').first() <User u'admin'> 

簡單的關係

SQLAlchemy 鏈接到關係型數據庫,關係型數據最擅長的東西就是關係。所以,咱們將建立一個使用兩張相互關聯的表的應用做爲例子:session

from datetime import datetime class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(80)) body = db.Column(db.Text) pub_date = db.Column(db.DateTime) category_id = db.Column(db.Integer, db.ForeignKey('category.id')) category = db.relationship('Category', backref=db.backref('posts', lazy='dynamic')) def __init__(self, title, body, category, pub_date=None): self.title = title self.body = body if pub_date is None: pub_date = datetime.utcnow() self.pub_date = pub_date self.category = category def __repr__(self): return '<Post %r>' % self.title class Category(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) def __init__(self, name): self.name = name def __repr__(self): return '<Category %r>' % self.name 

首先讓咱們建立一些對象:app

>>> py = Category('Python') >>> p = Post('Hello Python!', 'Python is pretty cool', py) >>> db.session.add(py) >>> db.session.add(p) 

如今由於咱們在 backref 中聲明瞭 posts 做爲動態關係,查詢顯示爲:函數

>>> py.posts <sqlalchemy.orm.dynamic.AppenderBaseQuery object at 0x1027d37d0> 

它的行爲像一個普通的查詢對象,所以咱們能夠查詢與咱們測試的 「Python」 分類相關的全部文章(posts):

>>> py.posts.all() [<Post 'Hello Python!'>] 

啓蒙之路

您僅須要知道與普通的 SQLAlchemy 不一樣之處:

  1. SQLAlchemy 容許您訪問下面的東西:
  2. Model 聲明基類行爲相似一個常規的 Python 類,不過有個 query 屬性,能夠用來查詢模型 (ModelBaseQuery)
  3. 您必須提交會話,可是沒有必要在每一個請求後刪除它(session),Flask-SQLAlchemy 會幫您完成刪除操做。
相關文章
相關標籤/搜索