1. 进行mysql数据库的创建,如果已经存在,就相当于进行数据库的连接操作

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import sessionmaker # 创建连接
engine = create_engine('mysql+pymysql://root:123456@localhost/oldboydb',
encoding='utf-8') Base = declarative_base() # 生成orm基类 class User(Base):
__tablename__ = 'user' # table的名字
id = Column(Integer, primary_key=True) # 创建id属性
name = Column(String(32)) # 创建name属性
password = Column(String(64)) # 创建密码属性 def __repr__(self): # 用于进行查找时的数据返回
return '<%s name :%s>' %(self.id, self.name)
Base.metadata.create_all(engine) # 进行指令的调用,即生成table 

2. 进行数据的查询,包括条件查询和多条件查询

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date
from sqlalchemy.orm import sessionmaker # 创建连接
engine = create_engine('mysql+pymysql://root:123456@localhost/oldboydb',
encoding='utf-8') Base = declarative_base() # 生成orm基类 class User(Base): # User继承了上述的操作 __tablename__ = 'student_user'
id = Column(Integer, primary_key=True)
name = Column(String(32))
password = Column(String(64)) def __repr__(self): # 返回查询到的信息
return '<id: %s name: %s password: %s>' %(self.id, self.name, self.password) # 执行上述的操作
Base.metadata.create_all(engine)
Session_class = sessionmaker(bind=engine) # 进行数据库的连接
Session = Session_class() # 生成session 实例 # 进行数据查询 .all()输出所有的检索结果,.first() 输出第一条的结果
data = Session.query(User).filter_by(name='alex').first()
print(data)
data = Session.query(User).filter(User.name == 'rain').first()
print(data) # 多条件查询
data = Session.query(User).filter(User.name=='rain').filter(User.id > 1).first()
print(data)

3. 进行用户属性的修改

# 进行数据的条件修改
data = Session.query(User).filter(User.name=='rain').first() # 查找出数据的类
data.name = 'Tom' # 对类属性进行修改
Session.commit() # 结果的提交
print(data.id) # 打印查找结果的id信息

4. 添加新的用户信息

fake_user = User(name='Jack', password='')  # 设置用户的名字和密码
Session.add(fake_user) # 将数据添加到表内

5. 进行用户信息的删除

data = Session.query(User).filter(User.name=='Jack').first()  # 查找用户信息
Session.delete(data) # 删除用户
Session.commit() # 提交结果

6. 数据的回滚操作

data = Session.query(User).filter(User.name=='Jack').first() # 查找符合条件的数据
Session.delete(data) # 数据删除
Session.rollback() # 数据回滚,取消上述操作
Session.commit() # 提交结果

7. 数据统计

print(Session.query(User).filter(User.name.in_(['alex', 'Jack'])).count())  # 统计名字是'alex'或者'Jack'的次数
# 2 

8. 根据名字进行数据分组

from sqlalchemy import func
data = Session.query(User.name, func.count(User.name)).group_by(User.name).all()
print(data) # [('alex', 1), ('Tom', 1), ('Jack', 1)]

9. 定义数据库的student表,进行连表查询

# 定义Student类关联student table
class Student(Base): __tablename__ = 'student'
id = Column(Integer, primary_key=True)
name = Column(String(32))
register_data = Column(Date)
sex = Column(String(32)) def __repr__(self): # 返回查询到的信息
return '<id: %s name: %s register_data: %s>' % (self.id, self.name, self.register_data) data = Session.query(User, Student).filter(User.name==Student.name).all() print(data)

10. 将两个表的属性进行串联, 这里将student的id属性,有上课记录study_record的stu_id 属性进行关联,构造一个学生的上课记录

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship # 创建连接
engine = create_engine('mysql+pymysql://root:123456@localhost/oldboydb',
encoding='utf-8') Base = declarative_base() # 生成orm 基类 # 构造student的类
class Student(Base): __tablename__ = 'student'
id = Column(Integer, primary_key=True)
name = Column(String(32), nullable=False)
register_data = Column(Date, nullable=False)
sex = Column(String(32)) def __repr__(self):
return '<id: %s name: %s sex: %s>'%(self.id, self.name, self.sex) class StudyRecord(Base): __tablename__ = 'study_record'
id = Column(Integer, primary_key=True)
day = Column(Integer, nullable=False)
status = Column(String(32), nullable=False)
stu_id = Column(Integer, ForeignKey('student.id')) # 构建外键 student = relationship('Student', backref='my_study_record') def __repr__(self):
return '<%s day:%s status:%s>'%(self.student.name, self.day, self.status) Base.metadata.create_all(engine) Session_class = sessionmaker(bind=engine) session = Session_class() s1 = Student(name='Alex', register_data='2015-04-21')
s2 = Student(name='Jack', register_data='2016-04-21')
s3 = Student(name='Rain', register_data='2017-04-21')
s4 = Student(name='Eric', register_data='2018-04-21') study_obj1 = StudyRecord(day=1, status='YES', stu_id=1)
study_obj2 = StudyRecord(day=2, status='NO', stu_id=1)
study_obj3 = StudyRecord(day=3, status='YES', stu_id=1)
study_obj4 = StudyRecord(day=1, status='YES', stu_id=2) # 进行数据的批量插入
session.add_all([s1, s2, s3, s4, study_obj1, study_obj2, study_obj3, study_obj4]) stu_obj = session.query(Student).filter(Student.name=='alex').first()
print(stu_obj.my_study_record) # 找出student='alex' 对应的学习记录

11. 一张表里的两个属性对应一张表的属性,就好比商品的收获地址和发货地址都对应的是地址数据库

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship # 创建连接
engine = create_engine('mysql+pymysql://root:123456@localhost/oldboydb',
encoding='utf-8') Base = declarative_base() class Customer(Base): __tablename__ = 'customer'
id = Column(Integer, primary_key=True)
name = Column(String(64)) billing_address_id = Column(Integer, ForeignKey('address.id'))
shipping_address_id = Column(Integer, ForeignKey('address.id')) billing_address = relationship('Address', foreign_keys = [billing_address_id])
shipping_address = relationship('Address', foreign_keys = [shipping_address_id]) class Address(Base): __tablename__ = 'address'
id = Column(Integer, primary_key=True)
street = Column(String(64))
city = Column(String(64))
state = Column(String(64)) def __repr__(self):
return self.street Base.metadata.create_all(engine) Session_class = sessionmaker(bind=engine) session = Session_class() stu_obj = session.query(Customer).filter(Customer.name=='computer').first()
print(stu_obj.shipping_address) # 找出student='alex' 对应的学习记录

12. 构建多对多的表格类型,即一本书可以对应多个作者,一个作者可以对应多本书

orm_m2m.py

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, Date, ForeignKey, Table
from sqlalchemy.orm import sessionmaker, relationship # 创建连接
engine = create_engine('mysql+pymysql://root:lishentao22@localhost/oldboydb?charset=utf8',
) Base = declarative_base() book_m2m_author = Table('book_m2m_author', Base.metadata,
Column('book_id', ForeignKey('books.id')),
Column('author_id', ForeignKey('authors.id'))) class Book(Base):
__tablename__ = 'books'
id = Column(Integer, primary_key=True)
name = Column(String(64))
pub_date = Column(Date)
authors = relationship('Author', secondary=book_m2m_author, backref='books') def __repr__(self):
return self.name class Author(Base):
__tablename__ = 'authors'
id = Column(Integer, primary_key=True)
name = Column(String(32)) def __repr__(self):
return self.name Base.metadata.create_all(engine)

orm_m2m_api.py

from day12 import orm_m2m
from sqlalchemy.orm import sessionmaker Session_class = sessionmaker(bind=orm_m2m.engine)
session = Session_class() # b1 = orm_m2m.Book(name='learn python with Alex', pub_date='2014-06-02')
# b2 = orm_m2m.Book(name='learn Zhangbility with Alex', pub_date='2015-02-06')
# b3 = orm_m2m.Book(name='go alex to taiguo', pub_date='2014-02-05')
#
# a1 = orm_m2m.Author(name='Alex')
# a2 = orm_m2m.Author(name='Jack')
# a3 = orm_m2m.Author(name='Rain')
#
# b1.authors = [a1, a3]
# b3.authors = [a1, a2, a3]
#
# session.add_all([b1, b2, b3, a1, a2, a3])
# session.commit() author_obj = session.query(orm_m2m.Author).filter(orm_m2m.Author.name=='alex').first()
# session.delete(author_obj) # 删除这个作者 book_obj = session.query(orm_m2m.Book).filter(orm_m2m.Book.id==14).first()
book_obj.authors.remove(author_obj) session.commit()

python sqlalchemy 进行 mysql 数据库操作的更多相关文章

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

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

  2. Python数据存储 — MySQL数据库操作

    本地安装MySQL 调试环境python3.6,调试python操作mysql数据库,首先要在本地或服务器安装mysql数据库. 安装参考:https://mp.csdn.net/postedit/8 ...

  3. python中的MySQL数据库操作 连接 插入 查询 更新 操作

    MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维 ...

  4. Python实战之MySQL数据库操作

    1. 要想使Python可以操作MySQL数据库,首先需要安装MySQL-python包,在CentOS上可以使用一下命令来安装 $ sudo yum install MySQL-python 2. ...

  5. python使用sqlalchemy连接mysql数据库

    环境:centos7+python2.7.5+sqlalchemy sqlalchemy是python当中比较出名的orm程序.在python中,使用sqlalchemy连接mysql数据库进行操作非 ...

  6. 10分钟教你Python+MySQL数据库操作

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...

  7. Python/MySQL(四、MySQL数据库操作)

    Python/MySQL(四.MySQL数据库操作) 一.数据库条件语句: case when id>9 then ture else false 二.三元运算: if(isnull(xx)0, ...

  8. Python进行MySQL数据库操作

    最近开始玩Python,慢慢开始喜欢上它了,以前都是用shell来实现一些自动化或者监控的操作,现在用Python来实现,感觉更棒,Python是一门很强大的面向对象语言,所以作为一个运维DBA或者运 ...

  9. python之(mysql数据库操作)

    前言:关心3步骤(此文章只针对python自动化根基展开描述) 什么是mysql数据库操作?  答:利用python对mysql数据库进行增, 删, 改, 查 操作 为什么要用python对mysql ...

随机推荐

  1. Springboot 测试类没有找到bean注入

    其他乱七八糟配置就不扯了,先上项目结构图 配置好参数后我再src/test/java类测试访问数据库时发现bean没有正确的注入.值得注意的是,这个项目的启动类是叫App.java 所以我们必须在这个 ...

  2. promises的深入学习

    Promise 的含义 § ⇧ Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大.它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供 ...

  3. Redis08-击穿&穿透&雪崩&spring data redis

    一.常见概念 击穿: 概念:redis作为缓存,设置了key的过期时间,key在过期的时候刚好出现并发访问,直接击穿redis,访问数据库 解决方案:使用setnx() ->相当于一把锁,设置的 ...

  4. P3806 离线多次询问 树上距离为K的点对是否存在 点分治

    询问树上距离为k的点对是否存在 直接n^2暴力处理点对 桶排记录 可以过 #include<cstdio> #include<cstring> #include<algo ...

  5. JS特殊写法

    记录下工作中碰到的JS特殊写法 (function(index) { $('#' + id).on("change", function() { me.onChange(this, ...

  6. 《Python基础教程》第三章:使用字符串

    find方法可以在一个较长的字符串中查找子字符串.它返回子串所在位置的最左端索引.如果没有找到则返回-1 join方法用来在队列中添加元素,需要添加的队列元素都必须是字符串 >>> ...

  7. openssl数据加密

    一.openssl简介 openssl是最著名的开源SSL,其用 C 实现,被广泛应用在基于TCP/Socket的网络程序中. OpenSSL:开源项目 三个组件:openssl: 多用途的命令行工具 ...

  8. 使用powershell的remove

    使用Remove-Module -Name Functions2 只是移除当前会话的模块 并且Import-Module -Name Functions2与 Remove-Module -Name F ...

  9. 喜大普奔!.NET界面控件DevExpress v19.2发布,快来下载体验

    DevExpress Universal Subscription(又名DevExpress宇宙版或DXperience Universal Suite)是全球使用广泛的.NET用户界面控件套包,De ...

  10. 题解 【POJ1934】 Trip

    题目意思: 有两个字符串(长度\(<=80\)),按字典序输出它们的最长公共子串的所有情况. 解析 最长公共子序列的长度应该都没问题了吧...有问题请自行百度 但关键是要求出每种情况,还要按字典 ...