1、SQLAlchemy介绍

SQLAlchemy是Python SQL工具包和对象关系映射器,为应用程序开发人员提供了SQL的全部功能和灵活性。

它提供了一整套众所周知的企业级持久性模式,专为高效和高性能的数据库访问而设计,适用于简单的Pythonic域语言。

SQLAlchemy对象关系映射器提供了一种将用户定义的Python类与数据库表关联的方法,以及这些类(对象)在其相应表中具有行的实例。它包括一个系统,可以透明地同步对象及其相关行之间状态的所有变化(称为工作单元),以及根据用户定义的类和它们之间定义的关系来表示数据库查询的系统。

2、sqlalchemy安装链接

可以使用easy_install或者pip安装SQLAlchemy:

easy_install sqlalchemy
或者
pip install sqlalchemy

查看SQLAlchemy版本信息

In [1]: import sqlalchemy

In [2]: sqlalchemy.__version__
Out[2]: '1.2.4'

SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

操作数据库方法1:

使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。

连接数据库使用create_engine():

from sqlalchemy import create_engine
#链接数据库
engine = create_engine('mysql+pymysql://test:123@10.0.0.10:3306/test')
#创建表
engine.execute('create table test1(id int,name varchar(48),salary int not null)')
#插入表数据
engine.execute("insert into test1(id,name,salary) values(1,'zs',88888)")
#查看数据
result = engine.execute('select * from test1')
print(result.fetchall())

不同数据库和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

操作数据库方法2:

使用 Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 进行数据库操作。Engine使用Schema Type创建一个特定的结构对象,之后通过SQL Expression Language将该对象转换成SQL语句,然后通过 ConnectionPooling 连接数据库,再然后通过 Dialect 执行SQL,并获取结果。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/2/28 16:06
# @Author : Py.qi
# @File : sqlalchemy_mysql_metadata.py
# @Software: PyCharm from sqlalchemy import select,create_engine, Table, Column, Integer, String, MetaData, ForeignKey metadata = MetaData()
#创建表
user = Table('teacher', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(20)),
)
#创建表
color = Table('student', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(20)),
)
#链接数据库
engine = create_engine("mysql+pymysql://test:123@10.0.0.10:3306/test", max_overflow=5)
#执行引擎语句
#metadata.create_all(engine)
#获取sql游标
conn = engine.connect()
# 创建SQL语句,插入数据
sql=user.insert().values(name='aa')
sql1=user.insert().values(name='bb')
#conn.execute(sql)
#conn.close() #删除数据
#sql3 = user.delete().where(user.c.id > 1)
#conn.execute(sql3)
#conn.close()
#更新数据
#sql4 = user.update().where(user.c.name == 'fenzi').values(name='dddd')
#conn.execute(sql4)
#查询数据
sql5=select([user,])
#sql6 = select([user.c.id,])
#sql7 = select([user.c.id, color.c.name]).where(user.c.id=='6')
# sql = select([user.c.name]).order_by(user.c.name)
# sql = select([user]).group_by(user.c.name) result = conn.execute(sql5)
print(result.fetchall())
conn.close()

操作数据库方法3:

使用 ORM/Schema Type/SQL Expression Language/Engine/ConnectionPooling/Dialect 所有组件对数据进行操作。根据类创建对象,对象转换成SQL,执行SQL。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2018/2/28 17:16
# @Author : Py.qi
# @File : sqlalchemy_expression.py
# @Software: PyCharm from sqlalchemy import Column,Integer,String
from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
#echo输出详细
engine = create_engine("mysql+pymysql://test:123@10.0.0.10:3306/test",max_overflow=5,echo=True)
base=declarative_base() #创建基类
class user(base):
__tablename__ = 'users'
id = Column(Integer,primary_key=True,autoincrement=True)
hostname=Column(String(64),unique=True,nullable=False)
ip_addr=Column(String(56),unique=True,nullable=False)
port=Column(Integer,default=22)
#寻找Base的所有子类,按照子类的结构在数据库中生成对应的数据表信息
base.metadata.create_all(engine)
Session=sessionmaker(bind=engine)
session=Session()
#增,插入单行
#u = user(hostname='zs',ip_addr='333',port=22)
#session.add(u)
#插入多行
#session.add_all([user(hostname='ls',ip_addr='111',port=873),
# user(hostname='ww',ip_addr='888',port=23),
# user(hostname='dff',ip_addr='567',port=3306)
# ])
#写入数据库
#session.commit() #删除
#session.query(user).filter(user.id > 3).delete()
#session.commit() #修改
# session.query(user).filter(user.id == 3).update({'hostname':'feng','port':3389})
# session.commit() #查
#ret=session.query(user).filter_by(hostname='feng').first()
# ret = session.query(user).filter_by(hostname='feng').all()
# print(ret) ret = session.query(user).filter(user.hostname.in_(['sb','bb'])).all()
# print(ret) # ret = session.query(User.name.label('name_label')).all()
# print(ret,type(ret)) # ret = session.query(User).order_by(User.id).all()
# print(ret) # ret = session.query(User).order_by(User.id)[1:3] print(ret)
session.commit()

SQLAlchemy官网:http://www.sqlalchemy.org/

python3之SQLAlchemy的更多相关文章

  1. Python3:sqlalchemy对sybase数据库操作,非sql语句

    Python3:sqlalchemy对sybase数据库操作,非sql语句 # python3 # author lizm # datetime 2018-02-01 10:00:00 # -*- c ...

  2. Python3:sqlalchemy对mysql数据库操作,非sql语句

    Python3:sqlalchemy对mysql数据库操作,非sql语句 # python3 # author lizm # datetime 2018-02-01 10:00:00 # -*- co ...

  3. python3 + flask + sqlalchemy +orm(3):多对多关系

    一篇文章有多个tag,一个tag也可以属于多篇文章,文章和tag存在多对多关系 config.py DEBUG = True #dialect+driver://root:1q2w3e4r5t@127 ...

  4. python3 + flask + sqlalchemy +orm(2):数据库中添加表

    往数据库中添加一张保存文章的表,表明为article,字段有id,title,content 同样一个配置文件:config.py DEBUG = True #dialect+driver://roo ...

  5. python3 + flask + sqlalchemy +orm(1):链接mysql 数据库

    1.pycharm中新建一个flask项目 2.按装flask.PyMySQL.flask-sqlalchemy 3.项目下面新建一个config.py 文件 DEBUG = True #dialec ...

  6. sqlalchemy 的 ORM 方式使用示例

    知乎: 使用 sqlalchemy 的 orm 方式操作数据库是一种怎样的体验? 答: 酸爽! 本文基于:win10 + python3.4 + sqlAlchemy 1.0.13 先看一个图(来源) ...

  7. Python 操作 MySQL 的正确姿势

    欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MyS ...

  8. 后端API入门到放弃指北

    后端API入门学习指北 了解一下一下概念. RESTful API标准] 所有的API都遵循[RESTful API标准]. 建议大家都简单了解一下HTTP协议和RESTful API相关资料. 阮一 ...

  9. 转载 Python 操作 MySQL 的正确姿势 - 琉璃块

    Python 操作 MySQL 的正确姿势 收录待用,修改转载已取得腾讯云授权 作者 |邵建永 编辑 | 顾乡 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能 ...

随机推荐

  1. 四则运算APP,团队项目之需求

    队名:IG.Super 成员:范铭祥,曾威,刘恒,黄伟俊. 一.程序功能需求 程序可以出带括号的正整数四则运算,支持分数,除法保留两位小数,如:(1/3+1)*2 = 2.67,特别注意:这里是2.6 ...

  2. Beta阶段冲刺-5

    一. 每日会议 1. 照片 2. 昨日完成工作 3. 今日完成工作 4. 工作中遇到的困难 杨晨露:现在我过的某种意义上挺滋润的,没啥事了都.......咳,困难就是前端每天都在想砸电脑,我要怎么阻止 ...

  3. Docker(二十三)-Docker使用pipework配置本地网络

    需求 在使用Docker的过程中,有时候我们会有将Docker容器配置到和主机同一网段的需求.要实现这个需求,我们只要将Docker容器和主机的网卡桥接起来,再给Docker容器配上IP就可以了. 下 ...

  4. Windows 下 Docker 的简单学习使用过程之三 创建images 导出images

    1. 创建images 主要有两种方法, 一种是docker commit 一种是docker build 其中有一个很明显的区别: docker commit 是将运行状态的虚拟机 进行 生成ima ...

  5. 阿里云视频直播PHP-SDK接入教程

    阿里云视频直播PHP-SDK接入教程 阿里云 视频直播 配置 及 PHP-SDK 接入教程        准备工作        域名管理        配置鉴权        地址生成器及DEMO演 ...

  6. iOS记录一常用的方法和语句

    1.当前控制器是否还显示,比较常用于网络请求回来页面已退出 //当前视图控制器是否在显示 +(BOOL)isCurrentViewControllerVisible:(UIViewController ...

  7. BZOJ4078 WF2014Metal Processing Plant(二分答案+2-SAT)

    题面甚至没给范围,由数据可得n<=200.容易想到二分答案,暴力枚举某集合的价值,2-SATcheck一下即可.这样是O(n4logn)的. 2-SAT复杂度已经是下界,考虑如何优化枚举.稍微改 ...

  8. MT【199】映射的个数

    (2018中科大自招)设$S=\{1,2,3,4,5\}$则满足$f(f(x))=x$的映射:$S \longrightarrow S$的个数____解答:由于$a\ne b$时必须满足$f(a)=b ...

  9. 内置函数sorted()

    这里顺便说一下sorted()和sort()的异同. sort 是 list 中的方法,只能对列表排序:sorted 可以对所有可迭代对象进行排序. list 的 sort 方法是对原列表进行操作,而 ...

  10. 三、spring boot 1.5.4 web容器定制(端口号等修改)

    spring boot 默认采用tomcat作为嵌入的web容器 定制方式有三种 1. 2.如下 @Component public class CustomizationBean implement ...