未分类
SQLAlchemy参考
转自:http://www.zouyesheng.com/sqlalchemy.html 1. 基本流程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# -*- coding: utf-8 -*- from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy import Column from sqlalchemy.types import String, Integer from sqlalchemy.ext.declarative import declarative_base engine = create_engine('postgresql://test@localhost:5432/test') DBSession = sessionmaker(engine) session = DBSession() BaseModel = declarative_base() class User(BaseModel): __tablename__ = 'user' id = Column(String, primary_key=True) username = Column(String, index=True) class Session(BaseModel): __tablename__ = 'session' id = Column(String, primary_key=True) user = Column(String, index=True) ip = Column(String) query = session.query(Session, User.username).join(User, User.id == Session.user) for i in query: print dir(i) |
2. 创建连接 SQLAlchemy 的连接创建是 Lazy 的方式, 即在需要使用时才会去真正创建. 之前做的工作, 全是”定义”. 连接的定义是在 engine 中做的. 2.1. Engine engine 的定义包含了三部分的内容, 一是具体数据库类型的实现, 二是连接池, 三是策略(即engine 自己的实现). 所谓的数据库类型即是 MYSQL , Postgresql , SQLite 这些不同的数据库. 一般创建 engine 是使用 create_engine 方法:
1 |
engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase') |
参数字符串的各部分的意义:
1 |
dialect+driver://username:password@host:port/database |
对于这个字符串, SQLAlchemy 提供了工具可用于处理它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# -*- coding: utf-8 -*- from sqlalchemy import create_engine from sqlalchemy.engine.url import make_url from sqlalchemy.engine.url import URL s = 'postgresql://test@localhost:5432/bbcustom' url = make_url(s) s = URL(drivername='postgresql', username='test', password="", host="localhost", port=5432, database="bbcustom") engine = create_engine(url) engine = create_engine(s) print engine.execute('select id from "user"').fetchall() |
create_engine 函数有很多的控制参数, 这个后面再详细说. 2.2. Engine的策略 create_engine 的调用, Read more…