SQLAlchemy使用笔记--简介

原创 2015年12月15日 21:42:40

官方文档
http://docs.sqlalchemy.org/en/rel_1_0/

不错的文章
http://gashero.yeax.com/?p=6
http://www.jianshu.com/p/152685de2533


概述

SQLAlchemy 是python 操作数据库的一个库。提供了2种方式操控数据库(官方文档可以看见分为SQLAlchemy ORM 与SQLAlchemy Core)。一种是ORM(使用类定义数据表),另一种可以说就是打包好的方便使用的sql语句Core(使用表格定义表)。

安装

pip install SQLAlchemy


SQLAlchemy Core

先说说core方式。

连接数据库,连接数据库ORM跟Core方式都都一样

from sqlalchemy import create_engine
engine = create_engine('sqlite:///db.sqlite3',echo=True)

echo=True表示运行时,进行CURD操作时会显示对应sql语句

然后定义元信息创建表格

from sqlalchemy import Table, Column, Integer, String, MetaData, ForeignKey

metadata = MetaData()

users = Table('users', metadata,
                Column('id', Integer, primary_key=True),
                Column('name', String),
                Column('fullname', String),
                )
addresses = Table('addresses', metadata,
                Column('id', Integer, primary_key=True),
                Column('user_id', None, ForeignKey('users.id')),
                Column('email_address', String, nullable=False)
                )

绑定到引擎并初始化数据库

metadata.create_all(engine) 

现在表就创建好了

插入数据

ins = users.insert()
str(ins)

你可以看到ins其实就是一个sql的insert语句

就下了就要执行ins,有很多中方式

ins = ins.values(name='jack', fullname='Jack Jones')
conn = engine.connect()
result = conn.execute(ins)

或者

conn = engine.connect()
conn.execute(ins, name='wendy', fullname='Wendy Williams') 

或者

ins.bind = engine
ins.execute(name="bill",fullname="billvsme")

或者

 metadata.bind = engine
 ins.execute(name="bill",fullname="billvsme")

插入多条数据

conn = engine.connect()
conn.execute(users.insert(),[
    {'name':'my01','fullname':'mymy01'},
    {'name':'my02','fullname':'mymy02'},
    {'name':'my02','fullname':'mymy02'},
    ]
)

select

s=users.select()
result=s.execute()
for row in result:
    print row

或者

from sqlalchemy.sql import select

s = select([users])
result = conn.execute(s)  
for row in result:
    print row

选择字段

s = select([users.c.name, users.c.fullname])

多张表的select

s = select([users,address])

连接

s = select([users, addresses]).where(users.c.id == addresses.c.user_id)

剩下的看文档


SQLAlchemy ORM

使用 ORM 就是 将 python class 与 数据库的 table 映射,免去直接写 sql 语句创建映射

定义表的model

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String

Base = declarative_base()
class User(Base):
    __tablename__ = 'users' 
    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)  
    def __repr__(self):
        return "<User(name='%s', fullname='%s', password='%s')>" % (
                                 self.name, self.fullname, self.password)

user.__table__ 可以查看对应的table

创建表

 Base.metadata.create_all(engine) 

建立会话

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

添加

ed_user = User(name='ed', fullname='Ed Jones', password='edspassword')
session.add(ed_user)
session.commit()

添加多条

session.add_all([
        User(name='wendy', fullname='Wendy Williams', password='foobar'),
        User(name='mary', fullname='Mary Contrary', password='xxg527'),
        User(name='fred', fullname='Fred Flinstone', password='blah')]
        )

Query

for instance in session.query(User).order_by(User.id): 
    print instance.name, instance.fullname

其余的看文档

版权声明:本文为博主原创文章,未经博主允许不得转载。

SQLAlchemy 简单笔记

http://www.jianshu.com/p/e6bba189fcbd 字数3167 阅读4084 评论2 喜欢9 ORM 江湖 曾几何时,程序员因为惧怕SQL而在开发的...
  • oMingZi12345678
  • oMingZi12345678
  • 2016年02月18日 12:37
  • 886

SQLAlchemy使用笔记--SQLAlchemy ORM(三)

参考: http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial.html#eager-loading 预先加载前面的代码,因为是lazy load,当...
  • billvsme
  • billvsme
  • 2015年12月17日 13:19
  • 1962

sqlalchemy的安装

1. 下载sqlalchemy http://prdownloads.sourceforge.net/sqlalchemy/SQLAlchemy-0.7b2.tar.gz?download 2...
  • StoneNotes
  • StoneNotes
  • 2013年11月04日 18:33
  • 2107

SQLAlchemy使用笔记--SQLAlchemy ORM(二)

建立表之间带关系外建在address添加user的外键from sqlalchemy import ForeignKey, Column, String, Integer from sqlalchem...
  • billvsme
  • billvsme
  • 2015年12月15日 20:34
  • 3141

sqlalchemy触发器的使用-Event

说是触发器,其实并不是触发器,这是sqlalchemy中的钩子,也称为事件,在触发某个操作的时候执行某个函数,和sql中的触发器时一样的,更加灵活简单。 我现在也正在学习,我就直接拿出来一个例子吧,...
  • guoqianqian5812
  • guoqianqian5812
  • 2017年12月25日 20:24
  • 119

SQLAlchemy使用笔记一

安装 pip install sqlalchemy 引用 import sqlalchemy print sqlalchemy.__version__ 连接 from sqlclachemy i...
  • sdulsj
  • sdulsj
  • 2017年11月08日 18:14
  • 95

python SQLAlchemy 使用经验

上篇文章提到了,最近在用 Python 做一个网站。除了 Tornado ,主要还用到了 SQLAlchemy。这篇就是介绍我在使用 SQLAlchemy 的过程中,学到的一些知识。 首先说...
  • u013636377
  • u013636377
  • 2016年05月06日 15:22
  • 1462

给Django用户的SQLAlchemy介绍

http://www.zlovezl.cn/articles/sqlalchemy-intro-for-django-guys/ SQLAlchemy是什么? SQLAlchemy的官...
  • scdxmoe
  • scdxmoe
  • 2017年06月15日 17:06
  • 243

python(十二)下:ORM框架SQLAlchemy使用学习

本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业   一、ORM介绍如果写程序用pymysql和程序交互,那是不是要写原生sql语...
  • fgf00
  • fgf00
  • 2016年10月27日 21:11
  • 8682

SQLAlchemy使用笔记--SQLAlchemy ORM(一)

SQLAlchemy ORM – Object Relational Tutorial 参考: http://docs.sqlalchemy.org/en/rel_1_0/orm/tutorial...
  • billvsme
  • billvsme
  • 2015年12月11日 16:42
  • 6086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SQLAlchemy使用笔记--简介
举报原因:
原因补充:

(最多只允许输入30个字)