频道栏目
首页 > 资讯 > SQL Server > 正文

SQLAlchemy ORM快速入门

17-08-01        来源:[db:作者]  
收藏   我要投稿

SQLAlchemy ORM 快速入门

1.安装

pip install sqlalchemy
 # 链接数据库使用的引擎pymysql,MySQL-Connector,MySQL-python,安装一个就可以
pip install MySQL-python 

2.链接数据库创建表

# coding:utf-8
from sqlalchemy import Column,String,create_engine,Table,MetaData
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 链接数据库('数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名')
engine = create_engine('mysql+mysqldb://root:mysql@localhost:3306/test',echo=True)
Base = declarative_base()# 生成SQLORM基类

class User(Base):
    __tablename__ = 'userinfo'# 表名

    id = Column(String(20),primary_key=True) # 字段
    name = Column(String(20))                # 字段

# 创建userinfo表(所有表结构)
Base.metadata.create_all(engine)
DBSession = sessionmaker(bind=engine)# 创建与数据库的会话,返回的是一个类

create_engine()用来初始化数据库连接。SQLAlchemy用一个字符串表示连接信息:
格式:’数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名’
根据不同的引擎进行配置

MySQL-python #引擎配置
     mysql+mysqldb://:@:/
pymysql #引擎配置
     mysql+pymysql://:@:/
MySQL-Connector #引擎配置
     mysql+mysqlconnector://:@:/

3.增加单条数据

# 创建session对象:
session = DBSession()# 生成链接数据库的实例
# 创建新User对象:
new_user = User(id='1',name='Bob')
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 关闭session:
session.close()

4.增加多条数据

new_user1 = User(id ='2',name='a')
new_user2 = User(id='3',name='b' )
session.add_all([new_user1,new_user2])
session.commit()
session.close()

5.查询

query()的参数是创建映射的类,使用all()返回的是列表

#获取所有数据
obj = session.query(User).all()

# 获取指定数据
session.query(User).filter(User.id==1).one()

# 获取返回数据的第一行
session.query(User).first()

# 查询ID>1的所有名字
session.query(User.name).filter(User.id>1).all()

# 通过索引取出数据
q1 = session.query(User.name).all()[1:2]

# 根据id降序排列
q1 = session.query(User).order_by(-User.id).all()

# 查询user表中id是1,3的姓名
q1 = session.query(User.name).filter(User.id.in_([1,3])).all()

# 模糊查询,%匹配多个字符,_匹配单个字符
q1 = session.query(User.name).filter(User.name.like('%h__')).all()

# 计算个数,返回查询的数量
q1 = session.query(User).count()

# 逻辑与查询
from sqlalchemy import and_
obj = session.query(User).filter(and_(User.id==1,User.name =='a')).all()
# 提交结果
session.commit()
session.close()

# 逻辑或查询
from sqlalchemy import or_
obj = session.query(User).filter(or_(User.id==1,User.name =='c')).all()
# 提交结果
session.commit()
session.close()

# 排序查询(按照id倒序显示name)
obj = session.query(User.name).order_by(-User.id).all()
# # 提交结果
session.commit()
session.close()

6.修改

# 按照条件修改,返回修改的条数
q1 = session.query(User).filter(User.id>2).update({'name':'boy'})
session.commit()
session.close()

7.删除

先查询在删除

# 查处需要删除的对象
obj = session.query(User).filter(User.id==2).one()
# 删除对象
session.delete(obj)
# 提交结果
session.commit()
session.close()

8.外键一对多关联

class Parent(Base):
    __tablename__ = 'parent_table'
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(20))
    # 可以通过parent_table表查child_table,数据库中不会创建children字段,只是建立里联系
    # 参数backref相当于给类Child添加了一个属性,在查询的时候可以通过Child.parents属性获取child_table表关联的所有parent_table表
    children = relationship('Child',backref = 'parents')



class Child(Base):
    __tablename__ = 'child_table'
    id = Column(Integer,primary_key=True,autoincrement=True)
    age = Column(Integer)
    parent_id = Column(Integer,ForeignKey('parent_table.id'))

查询例子:
#查询出符合条件的一个对象
q4 = session.query(Parent).filter(Parent.id==1).one()
print q4.children
# 通过对象属性children,查出这个对象的所有关联age字段值
for i in q4.children:
    print i.age

#查询出符合条件的一个对象
q5 = session.query(Child).filter(Child.id==2).one()
#打印对象中的关联
print q5.parents.name

# 内关联查询出Parent.id == Child.parent_id的结果
q6 = session.query(Parent).join(Child).filter(Parent.id == Child.parent_id).all()

9.常用的SQLAlchemy字段类型

常用的SQLAlchemy字段类型

10.常用的SQLAlchemy列选项

常用的SQLAlchemy列选项

11.常用的SQLAlchemy关系选项

常用的SQLAlchemy关系选项

相关TAG标签
上一篇:日期拼接转换
下一篇:Javascript多浏览器兼容性问题及解决方案
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站