转自:https://www.cnblogs.com/aylin/p/5770888.html

pymysql

pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。

1、下载安装

pip3 install pymysql

2、操作数据库

(1)、执行sql

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysql# 创建连接
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
# 创建游标
cursor = conn.cursor()# 执行SQL,并返回收影响行数
effect_row = cursor.execute("update hosts set host = '1.1.1.2'")# 执行SQL,并返回受影响行数
#effect_row = cursor.execute("update hosts set host = '1.1.1.2' where nid > %s", (1,))# 执行SQL,并返回受影响行数
#effect_row = cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])# 提交,不然无法保存新建或者修改的数据
conn.commit()# 关闭游标
cursor.close()
# 关闭连接
conn.close()

(2)、获取新创建数据自增ID

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.executemany("insert into hosts(host,color_id)values(%s,%s)", [("1.1.1.11",1),("1.1.1.11",2)])
conn.commit()
cursor.close()
conn.close()# 获取最新自增ID
new_id = cursor.lastrowid

(3)、获取查询数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')
cursor = conn.cursor()
cursor.execute("select * from hosts")# 获取第一行数据
row_1 = cursor.fetchone()# 获取前n行数据
# row_2 = cursor.fetchmany(3)
# 获取所有数据
# row_3 = cursor.fetchall()conn.commit()
cursor.close()
conn.close()

注:在fetch数据时按照顺序进行,可以使用cursor.scroll(num,mode)来移动游标位置,如:

  • cursor.scroll(1,mode='relative')  # 相对当前位置移动
  • cursor.scroll(2,mode='absolute') # 相对绝对位置移动

(4)、fetch数据类型

  关于默认获取的数据是元祖类型,如果想要或者字典类型的数据,即:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import pymysqlconn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123', db='t1')# 游标设置为字典类型
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
r = cursor.execute("call p1()")result = cursor.fetchone()conn.commit()
cursor.close()
conn.close()

sqlalchemy简介

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。

SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchmey采用了类似于Java里Hibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。

SQLAlchemy与数据库关系图如下:

sqlalchemy基本操作

一、安装sqlalchemy

  • 本文采用的是mysql案例,所以需要一台有安装mysql数据库的机器
  • 使用python的pip3安装 pip3 install sqlalchemy

安装完后查看版本信息

import sqlalchemy
sqlalchemy.__version__

二、连接数据库

在sqlalchemy中,session用于创建程序与数据库之间的会话。所有对象的载入和保存都需要通过session对象。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker# 链接数据库采用pymysq模块做映射,后面参数是最大连接数5
ENGINE=create_engine("mysql+pymysql://root@127.0.0.1:3306/digchouti?charset=utf8", max_overflow=5)
Session = sessionmaker(bind=engine)session = Session()

三、创建映射(创建表)

一个映射对应着一个Python类,用来表示一个表的结构。下面创建一个person表,包括id和name两个字段。也就是说创建表就是用python的的类来实现

import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import sessionmakerENGINE=create_engine("mysql+pymysql://root@127.0.0.1:3306/digchouti?charset=utf8", max_overflow=5)#生成一个SQLORM基类,创建表必须继承他,别问我啥意思就是这么规定的
Base = declarative_base()class Person(Base):__tablename__ = 'userinfo'id   = Column(Integer, primary_key=True)name = Column(String(32))def __repr__(self):return "<Person(name='%s')>" % self.name

此代码是创建了一个名字叫userinfo的表,表里有两列,一列是id,一列是name。

四、添加数据

当然我们创建了表,肯定也要添加数据,代码如下:

#创建一个person对象
person = Person(name='张岩林')
#添加person对象,但是仍然没有提交到数据库
session.add(person)
#提交数据库
session.commit()

当然还能添加多条数据:

session.add_all([Person(name='张岩林'),Person(name='aylin')
])
session.commit()

五、查找数据

在sqlalchemy模块中,查找数据给提供了query()的方法 下面我就把能用到的给列举一下:

#获取所有数据
session.query(Person).all()#获取name=‘张岩林’的那行数据
session.query(Person).filter(Person.name=='张岩林').one()#获取返回数据的第一行
session.query(Person).first()#查找id大于1的所有数据
session.query(Person.name).filter(Person.id>1).all()#limit索引取出第一二行数据
session.query(Person).all()[1:3]#order by,按照id从大到小排列
session.query(Person).ordre_by(Person.id)#equal/like/in
query = session.query(Person)
query.filter(Person.id==1).all()
query.filter(Person.id!=1).all()
query.filter(Person.name.like('%ay%')).all()
query.filter(Person.id.in_([1,2,3])).all()
query.filter(~Person.id.in_([1,2,3])).all()
query.filter(Person.name==None).all()#and or
from sqlalchemy import and_
from sqlalchemy import or_
query.filter(and_(Person.id==1, Person.name=='张岩林')).all()
query.filter(Person.id==1, Person.name=='张岩林').all()
query.filter(Person.id==1).filter(Person.name=='张岩林').all()
query.filter(or_(Person.id==1, Person.id==2)).all()# count计算个数
session.query(Person).count()# 修改update
session.query(Person).filter(id > 2).update({'name' : '张岩林'})

# 通配符
ret = session.query(Users).filter(Users.name.like('e%')).all()
ret = session.query(Users).filter(~Users.name.like('e%')).all()# 限制
ret = session.query(Users)[1:2]# 排序
ret = session.query(Users).order_by(Users.name.desc()).all()
ret = session.query(Users).order_by(Users.name.desc(), Users.id.asc()).all()# 分组
from sqlalchemy.sql import funcret = session.query(Users).group_by(Users.extra).all()
ret = session.query(func.max(Users.id),func.sum(Users.id),func.min(Users.id)).group_by(Users.name).all()ret = session.query(func.max(Users.id),func.sum(Users.id),func.min(Users.id)).group_by(Users.name).having(func.min(Users.id) >2).all()# 连表ret = session.query(Users, Favor).filter(Users.id == Favor.nid).all()ret = session.query(Person).join(Favor).all()ret = session.query(Person).join(Favor, isouter=True).all()# 组合
q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union(q2).all()q1 = session.query(Users.name).filter(Users.id > 2)
q2 = session.query(Favor.caption).filter(Favor.nid < 2)
ret = q1.union_all(q2).all()

查询这块比较多,可能写的不全还望各位见谅,剩下我相信大家都能扩展起来

上面的介绍完了,可能各位还不能吧融合到一块去,下面我给大家融合写在一块吧:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column
from sqlalchemy import Integer, String, TIMESTAMP
from sqlalchemy import ForeignKey, UniqueConstraint, Index
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy import create_engineENGINE=create_engine("mysql+pymysql://root@127.0.0.1:3306/digchouti?charset=utf8", max_overflow=5)Base = declarative_base()class Person(Base):__tablename__ = 'userinfo'id   = Column(Integer, primary_key=True)name = Column(String(32))def __repr__(self):return "<Person(name='%s')>" % self.name#创建连接数据库以供提交用,至此表会创建完成,可以去数据库里面查看
Base.metadata.create_all(ENGINE)
Session = sessionmaker(bind=engine)
# 往里面插入多条数据
session = Session()
session.add_all([Person(name='张岩林'),Person(name='很帅')
])
session.commit()

sqlalchemy表关系之高级用法

上面阐述的是对于一张表的操作,下面将说的是表关系的一对多,多对多,了解数据库的都知道外键,也就是表关系建立。

1、一对多外键(1)

第一种方法我们只用到普通的操作,这个方式相对于好理解,在第一张表创建完,插入数据然后要记得提交数据,然后往第二章表创建数据的时候,可以直接拿第一张相关联的数据,代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import  Column,Integer,ForeignKey,UniqueConstraint,Index,String
from sqlalchemy.orm import sessionmaker,relationship
from sqlalchemy import create_engineengine=create_engine('mysql+pymysql://root@127.0.0.1:3306/db1')Base = declarative_base()class Son(Base):__tablename__ = 'son'id = Column(Integer,primary_key=True)name = Column(String(32))age = Column(String(32))# 创建外键,对应父亲那张表的id项father_id = Column(Integer,ForeignKey('father.id'))class Father(Base):__tablename__ = 'father'id = Column(Integer,primary_key=True)name = Column(String(32))age = Column(String(32))Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()f1 = Father(name = 'zhangyanlin',age = '18')
session.add(f1)
session.commit()w1 = Son(name = 'xiaozhang1',age = 3,father_id = 1)
w2 = Son(name = 'xiaozhang2',age = 3,father_id = 1)session.add_all([w1,w2])
session.commit()

2、一对多外键(2)relationship

第二种方法和第一种一样,只是这里改用了relationship来做外键关系,代码如下:

#!/usr/bin/env python
# -*- coding:utf-8 -*-from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import  Column,Integer,ForeignKey,UniqueConstraint,Index,String
from sqlalchemy.orm import sessionmaker,relationship
from sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root@127.0.0.1:3306/db1')Base = declarative_base()class Son(Base):__tablename__ = 'son'id = Column(Integer,primary_key=True)name = Column(String(32))age = Column(String(32))father_id = Column(Integer,ForeignKey('father.id'))class Father(Base):__tablename__ = 'father'id = Column(Integer,primary_key=True)name = Column(String(32))age = Column(String(32))son = relationship('Son')Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)
session = Session()f1 = Father(name = 'zhangyanlin',age = '18')w1 = Son(name = 'xiaozhang1',age = '3')
w2 = Son(name = 'xiaozhang2',age = '4')
# 重点是这里绑定关系
f1.son = [w1,w2]
# 只需要把父亲给传进去,儿子的自然就上传进去啦
session.add(f1)
session.commit()

pymysql和sqlalchemy相关推荐

  1. python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解

    本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...

  2. flask mysql orm_Flask笔记:数据库ORM操作MySQL+pymysql/mysql-python+SQLAlchemy/Flask-SQLAlchemy...

    Python中使用sqlalchemy插件可以实现ORM(Object Relationship Mapping,模型关系映射)框架,而Flask中的flask-sqlalchemy其实就是在sqla ...

  3. python中的sql(pymysql和sqlalchemy)

    pymysql 一.初识pymysql #两种方式安装此模块 pip install pymysql 或者通过pycharm进行安装 # 导入pymysql import pymysql #创建连接 ...

  4. python 之路,Day11 (下)- sqlalchemy ORM

    python 之路,Day11 - sqlalchemy ORM 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 多对多关系 表结构设计作业 1. ORM介绍 ...

  5. pymysql dataframe 写入sql

    pymysql dataframe 写入sql import pandas as pd import pymysql from sqlalchemy import create_engine#engi ...

  6. 【Flask】SQLALchemy的介绍

    SQLAlchemy 是 Python 中一个通过 ORM 操作数据库的框架. SQLAlchemy对象关系映射器提供了一种方法,用于将用户定义的Python类与数据库表相关联,并将这些类(对象)的实 ...

  7. python sqlalchemy mysql 自动映射

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

  8. tornado SQLAlchemy

    简介 tornado没有像Django那样提供了内建的ORM,需要使用第三方的SQLAlchemy来实现. ORM全称:Object Relational Mapping 对象关系映射 好处:通过OR ...

  9. python的日期+excel+mysql+sqlAlchemy+mongo+logging

    目录 日期-天 正则-三种 pandas 生成 excel表 引入另一个python文件 pymysql数据库 SQLAlchemy pymongo 一:日期 from datetime import ...

最新文章

  1. 如何使用Create-React-App和自定义服务人员构建PWA
  2. 关于UAC执行级别的研究
  3. primefaces_懒惰的JSF Primefaces数据表分页–第2部分
  4. android联系人源码分析,android 联系人源码分析 新字段的添加流程
  5. Mego(05) - Mego Tools使用教程
  6. centors7 和 win7 修改开机顺序
  7. newifi路由器 php,新路由newifi固件下载
  8. 2019年房价调整是大概率事件,如果房价下跌,会出现什么问题?
  9. linux命令大全 load,linux命令TOP参数load average详解[转]
  10. 资料分享:送你一本《C#区块链编程》电子书!
  11. NEON Intrinsics 练习题
  12. ESP8266 WIFI模块调试及在QT Windows下的通讯
  13. 滴滴云A100 GPU裸金属服务器性能及硬件参数详解
  14. python DataScience数据分析笔记day06
  15. 通过Swap函数交换两个变量的值
  16. TCRT5000 红外测距使用解析
  17. 北斗开放平台,更加核心的语音压缩功能
  18. Spring六:Spring AOP API 上
  19. android系统相机实时数据采集流程,Android 摄像头采集与数据处理
  20. 【宅男宅女们的福音】电影天堂最新电影爬取及搜索脚本

热门文章

  1. 工厂工人访客定位系统
  2. 学习笔记-Flutter 动画详解(一)
  3. 台式win7f1到f12热键取消_如何关闭键盘f1-f12功能键 - 卡饭网
  4. python+vue+elementui校园二手书交易信息网站django
  5. 轻松解决自签名证书不安全!
  6. 使用R包itol.toolkit制作精美进化树
  7. 《微信小程序开发实战》课后题
  8. 产品策划五:App界面设计风格
  9. Elasticsearch集群部署及使用
  10. PMC Organometallix继续业务扩张