首页 > 数据库技术 > 详细

SQLAlchemy

时间:2019-02-14 18:56:43      阅读:202      评论:0      收藏:0      [点我收藏+]

       一 . 介绍       

   SQLAlchemy 是一个基于 python 实现的 ORM 框架.该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简而言之就是: 将类和对象转换成SQL,然后使用数据API进行SQL并获取执行结果.

 pip install sqlalchemy -i http://pypi.douban.com/simple  --trusted-host pypi.douban.com 

# 下载SQLAlchemy 模块

 

 技术分享图片

组成部分:

  • Engine,框架的引擎
  • Connection Pooling ,数据库连接池
  • Dialect,选择连接数据库的DB API种类
  • Schema/Types,架构和类型
  • SQL Exprression Language,SQL表达式语言

SQLAlchemy本身无法操作数据库,其必须以来pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作,如:

MySQL-Python
    mysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>
    
pymysql
    mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]
    
MySQL-Connector
    mysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>
    
cx_Oracle
    oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]
    
更多:http://docs.sqlalchemy.org/en/latest/dialects/index.html

 

 

       二 . 使用       

    1 . 创建数据表   

   注意 : 要先创建对应的数据库,我的数据库叫 s1

 # ORM中的数据表是什么呢?
 # Object Relation Mapping
 # Object - Table 通过 Object 去操纵数据表
 # 从而引出了我们的第一步创建数据表 - 创建Object
 # 1. 创建Object
 # class User(object):
 #     pass



#  通过SQLAlchemy创建数据表
#  1.导入SQLAlchemy

from sqlalchemy.ext.declarative import declarative_base

#  2.创建ORM模型基类,要被继承
Base = declarative_base()

#  3.导入ORM对应数据库类型的字段,比如:列,整型,字符串
from sqlalchemy import Column, Integer, String


#  4.创建ORM对象
# 当前的这个Object继承了Base也就是代表了Object继承了ORM的模型
class User(Base):   # 相当于 Django Models中的 Model
       # 创建表名,__双下划线
    __tablename__ = "user"
    #  设置为主键,并且自增(默认)
    # id = Column(数据类型,索引,主键,外键,等等)
    id = Column(Integer, primary_key=True, autoincrement=True)
    # 设置索引
    name = Column(String(32), index=True)


#  5.创建数据库连接
from sqlalchemy import create_engine

# 数据库创建连接完成
# 连接时 用mysql 和 python 的pymsql
enginne = create_engine("mysql+pymysql://root:@127.0.0.1:3306/s1?charset=utf8")

#  6.去数据库中创建于User所对应的数据表
#  去User数据库中创建所有基层Base类的 ORM对象
# Base 自动检索所有继承Base的ORM 对象 并且创建所有的数据表
Base.metadata.create_all(enginne)

 技术分享图片


      2 . 增删改查操作    

 2.1 增加数据

技术分享图片
# 创建会话 -- 打开数据库连接
from create_table import enginne
from sqlalchemy.orm import sessionmaker
# 创建会话窗口
# 创建 sessionmaker 会话对象,将数据库引擎 engine 交给 sessionmaker
Session = sessionmaker(enginne)
# 打开会话窗口
db_session = Session()

#  1.增加数据   == insert
#  原生mysql语句 , insert into user(name) values("yirenye")
from create_table import User
user_obj = User(name="异人夜")
# 通过de_session已经打开的会话窗口,提交数据
db_session.add(user_obj)  # 相当于 insert into
# 执行会话窗口中的所有操作
db_session.commit()
# 关闭窗口
db_session.close()

# 2.增加批量数据 -- 多条
from create_table import User
db_session.add_all([
    User(name="小慯"),
    User(name="Tom"),
    User(name="Ealse"),
])
db_session.commit()
db_session.close()

# 扩展
from create_table import User
User1 = User(name="666")
User2 = User(name="888")
User3 = User(name="999")

db_session.add(User1)
db_session.add(User2)
db_session.add(User3)

db_session.commit()
db_session.close()
增加数据

 技术分享图片

2.2 查询书籍

技术分享图片
# 会话窗口
from sqlalchemy.orm import sessionmaker
from create_table import enginne

Session = sessionmaker(enginne)
db_session = Session()

from create_table import User

# 1.简单查询
#  原生sql语句  select * from table
# 查询全部
user_list = db_session.query(User).all()
for row in user_list:
    print(row.id, row.name)
"""
5 666
6 888
7 999
4 Ealse
3 Tom
2 小慯
1 异人夜
"""
# 查询一条
user = db_session.query(User).first()
print(user.id, user.name)
# 5 666

# 2.带条件查询
user_list = db_session.query(User).filter(User.id == 4).all()
print(user_list[0].id, user_list[0].name)
# 4 Ealse

user = db_session.query(User).filter_by(id=3).first()
print(user.id, user.name)
# 3 Tom

user_list = db_session.query(User).filter(User.id >= 4).all()
for row in user_list:
    print(row.id, row.name)
"""
4 Ealse
5 666
6 888
7 999
"""

# 扩展,查看sql语句
sql = db_session.query(User).filter(User.id >= 5)
print(sql)
"""
SELECT user.id AS user_id, user.name AS user_name 
FROM user 
WHERE user.id >= %(id_1)s
"""
# 关闭会话
db_session.close()
查询数据

2.3 修改数据 

技术分享图片
# 更新修改数据
from sqlalchemy.orm import sessionmaker
from create_table import enginne, User

Session = sessionmaker(enginne)
db_session = Session()

# 修改数据 -- 先查询数据在进行修改
#  原生sql语句的修改(将id=1的数据的 name 修改成666) : update "user" set "name" = "666" where id = 1
res = db_session.query(User).filter(User.name=="Ealse").update({"name":"杰斯"})
print(res)
# 1  -- 符合条件的只有一条
db_session.commit()
db_session.close()

res = db_session.query(User).filter(User.id >= 5).update({"name":666666})
print(res)
# 3  -- 符合条件的有3条
db_session.commit()
db_session.close()
修改数据

技术分享图片 技术分享图片

2.4 删除数据 

 

SQLAlchemy

原文:https://www.cnblogs.com/zmc940317/p/10376008.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!