在使用 Python web 框架Flask时发现很有必要学习一下SQLAlchemy。SQLAlchemy分为两部分,一是SQLAlchemy core,另一部分是SQLAlchemy ORM。使用SQLAlchemy的好处是经过SQLAlchemy抽象后很容易实现了代码在不同数据库之间兼容。SQLAlchemy core是SQLAlchemy ORM的基础。
以下内容是《Essential SQLAlchemy》第一章的读书笔记。
1. 通用数据类型
2. Metadata
SQLAlchemy的对象,用来描述数据库结构,与Table、Column、Index、Keys 和 Constraints等概念相关。
3. 实例
1)4张表的关系模型
2)4张表的python代码
from datetime import datetime
from sqlalchemy import (MetaData, Table, Column, Integer, Numeric, String,
DateTime, ForeignKey, create_engine)
metadata = MetaData()
cookies = Table('cookies' , metadata,
Column('cookie_id' , Integer(), primary_key=True),
Column('cookie_name' , String(50), index=True),
Column('cookie_recipe_url' , String(255)),
Column('cookie_sku' , String(55)),
Column('quantity' , Integer()),
Column('unit_cost' , Numeric(12, 2))
)
users = Table('users' , metadata,
Column('user_id' , Integer(), primary_key=True),
Column('customer_number' , Integer(), autoincrement=True),
Column('username' , String(15), nullable=False, unique=True),
Column('email_address' , String(255), nullable=False),
Column('phone' , String(20), nullable=False),
Column('password' , String(25), nullable=False),
Column('created_on' , DateTime(), default=datetime. now),
Column('updated_on' , DateTime(), default=datetime. now, onupdate=datetime. now)
)
orders = Table('orders' , metadata,
Column('order_id' , Integer(), primary_key=True),
Column('user_id' , ForeignKey('users.user_id' ))
)
line_items = Table('line_items' , metadata,
Column('line_items_id' , Integer(), primary_key=True),
Column('order_id' , ForeignKey('orders.order_id' )),
Column('cookie_id' , ForeignKey('cookies.cookie_id' )),
Column('quantity' , Integer()),
Column('extended_cost' , Numeric(12, 2))
)
engine = create_engine('sqlite:///:memory:' )
metadata.create_all(engine)