前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQLAlchemy简单入门

SQLAlchemy简单入门

作者头像
若与
发布于 2018-04-25 03:51:33
发布于 2018-04-25 03:51:33
2.1K00
代码可运行
举报
运行总次数:0
代码可运行
SQlAlchemy简单使用
sqlalchemy介绍

SQLAlchemy的是Python的SQL工具包和对象关系映射器,让应用程序开发人员可以使用上SQL的强大功能和灵活性。 它提供了一套完整的企业级持久化模式,专为高效率和高性能的数据库访问而设计,简单易用用,专门为Python语言而准备。

SQLAlchemy的理念

SQL数据库与对象集合目标不同,它需要关注更大的数据容量与更高的性能;而对象集合则和数据表或数据行的目标不同,它需要更好的数据抽象。 SQLAlchemy设计的目的,就是适配这两个原则。

SQLAlchemy把数据库当作是一个关系型代数引擎,不只是数据表的一个集合。数据行不仅可以从数据表中查询出来,也可以从数据表关联后成形成的逻辑数据表和其他的查询语句结果中进行查询;这些元素可以组合形成更大的数据结构。 SQLAlchemy的表达式语言就是建立在这个核心概念之上的。

SQLAlchemy组件中最有名的是它的对象关系映射器(ORM),是一个提供数据映射器模式的可选组件,利用这个组件,类可以以开放式的多种方式映射到数据库上,允许对象模型的设计和数据库架构的设计,一开始就以分离方式进行各自的开发。实现松耦合的架构.

sqlalchemgy文档

独处

连接数据库
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker


DB_CONNECT_STRING = 'mysql+mysqldb://root:123@localhost/mydb?charset=utf8'
engine = create_engine(DB_CONNECT_STRING)
DB_Session = sessionmaker(bind=engine)
session = DB_Session()

上面的DB_CONNECT_STRING是连接数据库的路径,这个路径也就是database_urls包含了使用的数据库驱动以及数据库的连接信息等.一般格式是:dialect+driver://username:password@host:port/database 下面给出其他形式的数据库连接示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# default
engine = create_engine('postgresql://scott:tiger@localhost/mydatabase')

# psycopg2
engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase')

# pg8000
engine = create_engine('postgresql+pg8000://scott:tiger@localhost/mydatabase')


# default
engine = create_engine('mysql://scott:tiger@localhost/foo')

# mysql-python
engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo')

# MySQL-connector-python
engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo')

# OurSQL
engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')
直接操作sql
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sql= 'show tables'
session.execute(sql)
result = session.excute(sql).fetchall()

sql = 'create database test'
session.excute(sql)

以上使用sqlalchemy直接执行sql语句,这和mysql-python没有任何区别.当然,需要注意在事务操作中,记得commit.在操作很复杂的sql语句,不能映射到对应的ORM上,这是备用选项.

下面开始介绍sqlalchemy的ORM.从数据库的增删查改.

关联一个数据表
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, Integer

engine = create_engine('mysql+mysqldb://root:youdi@localhost:3306/alchemy?charset=utf8')
Base = declarative_base()

class User(Base):

    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column('username',String(64), nullable=False)
    password = Column(String(64), nullable=False)

    email = Column(String(64), nullable=False)

    def __repr__(self):
        return '%s(%r)' % (self.__class__.__name__, self.username)
插入数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import User
from sqlalchemy.orm import sessionmaker
session = sessionmaker(bind=engine)
mysql = session()

user1 = User()
user1.id = 2
user1.name = 'hello'
user1.email = '123@gmail.net'
user1.password = 'password'

mysql.add(user1)

user2 = User(id=3,name='youmi',password='1234',email='12@you.net')

mysql.add(user2)

mysql.commit()

上面插入了两条数据

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql> select * from users;
+----+----------+----------+---------------+
| id | username | password | email         |
+----+----------+----------+---------------+
|  2 | hello    | password | 123@gmail.net |
|  3 | youmi    | 1234     | 12@you.net    |
+----+----------+----------+---------------+
2 rows in set (0.02 sec)
查询表中的数据
1.查询所有的数据

如同select * from tb_name

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query = mysql.query(User)
sql = str(query) # 执行的sql语句
sql = query.statement # 执行的sql语句

users_name = []
for i in query:  #遍历时查询
    users_name.append(i.name)

query.all() #返回所有对象的列表
query.first() #返回第一个对象,记录不存在时,first() 会返回 None
query.one()  # 不存在,或有多行记录时会抛出异常

另外,query也可以使用User直接获得
query = User.query
2.显示指定字段的数据

如同: select name,id from users

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
names = mysql.query(User.name)
names.all() #每行都是一个元组
3.筛选条件

limit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql.query(User).limit(10)
User.query.limit(10)

offset

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
offset = 10
mysql.query(User).offset(offset).limit(10)
# or
User.query.offset(offset).limit(10)

oder by

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql.query(User).order_by('id')
mysql.query(User).order_by(User.id.desc())
mysql.query(User).order_by('id asc')
mysql.query(User).order_by(User.name.desc(),User.id)

filter sql中的where后面的条件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql.query(User).filter(User.id == 1).scalar()
# or 使用字面量
mysql.query(User).filter('id = 1').scalar()
# 多个条件
mysql.query(User).filter(User.id > 1,User.name != 'youmi').scalar()
# in条件
mysql.query(User).filter(User.id.in_((1,2,3))).scalar()

# or条件需要导入or_()函数
mysql.query(User).filter(or_(User.id > 1,User.name != 'youmi')).scalar()

补充(所有的额外函数): 其中func映射到sql中的很多函数,如:count,sum,now,current_timestamp,md5等等, 其他的函数,有case对应sql中when case

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from .sql import (
    alias,
    and_,
    asc,
    between,
    bindparam,
    case,
    cast,
    collate,
    delete,
    desc,
    distinct,
    except_,
    except_all,
    exists,
    extract,
    false,
    func,
    insert,
    intersect,
    intersect_all,
    join,
    literal,
    literal_column,
    modifier,
    not_,
    null,
    or_,
    outerjoin,
    outparam,
    over,
    select,
    subquery,
    text,
    true,
    tuple_,
    type_coerce,
    union,
    union_all,
    update,
    )
4.联表查询(join)

INNER JOIN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query = User.query.join(Group, User.gid == Group.id)
.filter(User.id != None,"is_superuser & 1 = 1")
.order_by(User.last_edit.asc()).limit(10)

LEFT JOIN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query = User.query.outerjoin(Group, User.gid == Group.id)
.filter(User.id != None,"is_superuser & 1 = 1")
.order_by(User.last_edit.asc()).limit(10)

RIGHT JOIN

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
query = User.query.outerjoin(Group, User.gid == Group.id)
.filter(User.id != None,"is_superuser & 1 = 1")
.order_by(User.last_edit.asc()).limit(10)

其他的连接方式,需要自己指定参数,可以灵活的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    def join(self, right, onclause=None, isouter=False, join_to_left=None):
        return _ORMJoin(self, right, onclause, isouter)

    def outerjoin(self, right, onclause=None, join_to_left=None):
        return _ORMJoin(self, right, onclause, True)
修改数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql.query(User).filter(User.id == 1).update({User.name:'youmi'})

# or 
user = mysql.query(User).filter(User.id == 1)
user.name = 'test'
mysql.flush() #写入数据库,但并没有提交
删除数据
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql.query(User).filter(User.id == 1).delete()
mysql.commit()

心 * 自由

不过相比Django的ORM.sqlalchemy对sql的支持更好. 上面只是简单的介绍了sqlalchemy的增删查改,需要更加深入的特性,可以查看官方文档,或者查看源码.

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.04.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 使用SQLAlchemy数据库模块
SQLAlchemy 是用Python编程语言开发的一个开源项目,它提供了SQL工具包和ORM对象关系映射工具,使用MIT许可证发行,SQLAlchemy 提供高效和高性能的数据库访问,实现了完整的企业级持久模型。
王 瑞
2023/11/24
6310
python约会之ORM——sqlalchemy
orm操作是所有完整软件中后端处理最重要的一部分,主要完成了后端程序和数据库之间的数据同步和持久化的操作,本文基于sqlalchemy官方文档进行整理,完成sqlalchemy的核心操作
大牧莫邪
2018/08/27
1.7K0
Python操作SQLAlchemy
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
菲宇
2019/06/13
9050
Python操作SQLAlchemy
专栏:012:没时间解释了,快使用sqlalchemy
用理工科思维看待这个世界 系列爬虫专栏 崇尚的学习思维是:输入,输出平衡,且平衡点不断攀升。 今天的主题是:sqlalchemy的使用(这是一篇没有真正实战的博文) 0:框架 序号 内容 说明 01 概念解释 是什么? 02 代码解释 怎么做? 03 总结 如何做的? ---- 1:概念 ORM 对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的
谢伟
2018/06/06
8580
SQLAlchemy使用
SQLAlchemy是Python语言的一款流行的ORM(Object Relational Mapper)框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,即将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
职场亮哥
2020/10/10
9270
sqlalchemy的基本使用
https://docs.sqlalchemy.org/en/14/orm/session_basics.html#querying-1-x-style
崔哥
2023/10/23
4430
SQLAlchemy
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
小小咸鱼YwY
2020/06/19
3.3K0
[1024]python sqlalchemy中create_engine用法
More notes on connecting to PostgreSQL at PostgreSQL.
周小董
2021/07/20
4.7K0
两分钟了解Python之SQLAlchemy框架的使用
您好,我是码农飞哥,感谢您阅读本文!本文将主要介绍一款应用于Python语言中的ORM框架SQLAlchemy。ORM的是Object-Relational Mapping,作用是把关系数据库的表结构映射到对象上。
码农飞哥
2021/08/18
1K0
Flask框架(五)之SQLAlchemy
SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。
GH
2020/03/19
3K0
Flask-SQLAlchemy
一.SQLAlchemy介绍 SQLAlchemy是一个基于Python实现的ORM框架。该框架建立在 DB API之上,使用关系对象映射进行数据库操作,简言之便是:将类和对象转换成SQL,然后使用数据API执行SQL并获取执行结果。 1 pip3 install sqlalchemy 组成部分: Engine,框架的引擎 Connection Pooling ,数据库连接池 Dialect,选择连接数据库的DB API种类 Schema/Types,架构和类型 SQL Ex
用户1214487
2018/01/24
5.6K0
Flask-SQLAlchemy
ORM框架SQLAlchemy
原文链接:https://www.cnblogs.com/mengqingjian/articles/8521512.html
菲宇
2019/09/23
1.2K0
ORM框架SQLAlchemy
python ORM框架SQLAlchemy
SQLAlchemy是一个基于Python的ORM框架。该框架是建立在DB-API之上,使用关系对象映射进行数据库操作。
用户5760343
2022/05/14
8150
Python ORM - pymysql&sqlalchemy
Python3主要是面向对象的编码风格,访问数据库也可以使用ORM框架来实现面向对象,本文介绍pymysql和sqlalchemy 安装组件 pip3 install pymysql pip3 install sqlalchemy 定义数据对象 user表结构 CREATE TABLE `user` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(64) NOT NULL, `age` int DEFAULT NULL, `del
十毛
2021/01/21
7780
SqlAlchemy 2.0 中文文档(七十六)
本文档描述了 SQLAlchemy 版本 0.9 与 2014 年 5 月维护发布的版本之间的更改,以及于 2015 年 4 月发布的版本 1.0 之间的更改。
ApacheCN_飞龙
2024/08/26
3380
SALalchemy增删改查
1.单表操作 1.1创建表 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, INT, String from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # Base 是 ORM的基类 Base = declarative_base() # 1.创建表 class User(Ba
少年包青菜
2020/05/13
1.1K0
python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
  对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。
用户1432189
2018/09/05
2.3K0
python【第十二篇下】操作MySQL数据库以及ORM之 sqlalchemy
SqlAlchemy 2.0 中文文档(八十一)
本文档描述了 SQLAlchemy 版本 0.3(2007 年 10 月 14 日最后发布)与 SQLAlchemy 版本 0.4(2008 年 10 月 12 日最后发布)之间的变化。
ApacheCN_飞龙
2024/08/26
2410
SqlAlchemy 2.0 中文文档(二十一)
本页包含了由 Python 生成的Query构造的文档,多年来这是与 SQLAlchemy ORM 一起使用时的唯一 SQL 接口。从版本 2.0 开始,现在采用的是全新的工作方式,其中与 Core 相同的select()构造对 ORM 同样有效,为构建查询提供了一致的接口。
ApacheCN_飞龙
2024/06/26
9590
SqlAlchemy 2.0 中文文档(七十五)
本指南介绍了 SQLAlchemy 1.1 版本的新功能,并记录了影响用户将其应用程序从 SQLAlchemy 1.0 系列迁移到 1.1 系列的变化。
ApacheCN_飞龙
2024/08/26
7270
相关推荐
Python 使用SQLAlchemy数据库模块
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验