python3之SQLAlchemy
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 sqlalchemyIn [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-Pythonmysql+mysqldb://<user>:<password>@<host>[:<port>]/<dbname>pymysqlmysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]MySQL-Connectormysql+mysqlconnector://<user>:<password>@<host>[:<port>]/<dbname>cx_Oracleoracle+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: PyCharmfrom sqlalchemy import select,create_engine, Table, Column, Integer, String, MetaData, ForeignKeymetadata = 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: PyCharmfrom 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/
转载于:https://www.cnblogs.com/zhangxinqi/p/8480049.html
python3之SQLAlchemy相关推荐
- python3使用SQLALchemy报错No module named ‘MySQLdb‘
解决方法: 安装pymysql 然后将数据库链接改成mysql+pymysql://username:password@server/db的形式: 参考文章:遇到问题–python–python3使用 ...
- python3 flask sqlalchemy 数据库操作
数据的查询 all():查询全部的数据,其结果是一个列表,每一个元素都是一个对象students = Student.query.all()过滤查询:第一种:filter,结果是baseQuery o ...
- python SQLAlchemy数据库工具
一.sqlalchemy概述与架构 1.SQLAlchemy SQLAlchemy是Python编程语言下的一款开源软件.提供SQL包以及对象关联映射(ORM)工具,使用MIT许可证 SQLAlche ...
- python数据库框架_Python数据库及ORM框架对比选择
使用Python进行MySQL的库主要有三个: Python-MySQL(更熟悉的名字可能是MySQLdb), PyMySQL SQLAlchemy. Python-MySQL: 资格最老,核心由C语 ...
- Python全栈 进阶(进阶内容都在这了)
MySQL 数据库 终端命令: vi 文本 ...
- python生成激活码
github上的小练习啦,生成激活码,并且保存到mysql数据库中,代码: #coding=utf-8 import uuid import pymysql ''' uuid库生成128位全局唯一标识 ...
- Python 操作 MySQL 的正确姿势
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MyS ...
- mysql接口测试_用python实现接口测试(四、操作MySQL)
一.MySQL简介 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy. Python-MySQL资格最老 ...
- python logging mysql_Python 操作 MySQL 的正确姿势
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:邵建永 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MyS ...
最新文章
- java为什么序列化不一致_java – 为什么Jackson多态序列化在列表中不起作用?
- MangoDB使用总结
- 转载:Linux 的系统服务及其配置(略有修改)
- 如何根据jar包的名称找到包含对应源代码的jar包
- 随想录(redis的学习和使用)
- 基础层区块链Harmony发布主网新版本v4.0.0
- 境内银行卡磁条信息格式
- 通过100个单词掌握英语语法(二十三)go
- 使用 SpringBoot 写 RESTful风格 增删改查接口
- Ajax Session Timeout处理
- 学生学籍管理系统页面源代码html_学生管理系统(界面+源代码)
- STM32+DWM1000开发uwb测距系列教程之一:官方例程简介
- 在blog中放置北京奥运倒计时Flash
- 【转载】MATLAB入门书籍推荐
- matlab 博弈论代码,各种博弈论详解(示例代码)
- 带你认识世界最值钱的十种货币
- 判断一个数是否为整数、正整数、小数通用算法
- 数据库基础:IndexedDB
- linux 起网口up_linux 网口设置
- 2021 Java面试题总结,附答案(个人遇到面试题汇总)
热门文章
- 如何给一个二维数组动态分配内存
- html如何超链接到servlet
- android之ListView和adapter配合显示图片和文字列表
- sprintf,sscanf,snprintf
- MySQL笔记11:C语言编程API函数和完整实例演示!
- 常考数据结构与算法:平衡二叉树
- 用python编写一个高效搜索代码工具
- python-psutil
- C++智能指针剖析(上)std::auto_ptr与boost::scoped_ptr
- 如何在Linux中查看所有正在运行的进程