1.复习面向对象的内容:

编程方式主要有两种:1.面向过程编程2.面向对象编程;

1.面向过程编程的思想就是根据设计要求从上到下一次进行编程。数据和逻辑是不进行分离的

2.面向对象编程:有时候我们在进行面向过程编程的时候会遇到会有很多变量和方法,但是他们属于同一类(即属性和方法一样)这个是由就可以使用面向对象。数据和逻辑进行分离的。

3面向对象有两个作用:1.模板约束(所有实例化的对象都是同一模型)2.当一类函数公用同样一个参数的时候,可以转换成类——进行分类(也可以封装程模块)

1面向过程的编程:

deffunc(name):print('%s走了100步'%(name))deffunc1(name):print('%s吃了一碗米'%(name))

func('alex')

func1('alex')

View Code

2.面向对象的编程:

classFoo:def __init__(self,name):

self.name=namedeffunc(self):print('self.name走了100步')deffunc1(self):print('self.name吃了一碗米')

ret=Foo('alex')#进行实例化

ret.func()

ret.func1()

View Code

3.在面向对象的时候对实例化对象使用()则时调用类里面的call方法:

classFoo:def __init__(self,name):

self.name=namedeffunc(self):print('self.name走了100步')deffunc1(self):print('self.name吃了一碗米')def __call__(self):print('调用了call方法')

ret=Foo('alex')#进行实例化

ret()

结果为

调用了call方法

View Code

4.一个类其实就是一个字典:查看类里面的属性

classFoo:

name='alex'

def __init__(self,name):

self.name=namedeffunc(self):print('self.name走了100步')deffunc1(self):print('self.name吃了一碗米')def __call__(self):print('调用了call方法')

ret=Foo('alex')#进行实例化

print(Foo.__dict__)

View Code

5.查看实例化对象中的属性·:调用的类中的方法是:setitem()

classFoo:

name='alex'

def __init__(self,name):

self.name=namedeffunc(self):print('self.name走了100步')deffunc1(self):print('self.name吃了一碗米')def __call__(self):print('调用了call方法')

ret=Foo('alex')#进行实例化

print(ret.__dict__)

结果为

{'name': 'alex'}

View Code

6.ret.__dict__['name'] 就是调用setitem(self,item,values)

ret=Foo('alex')#进行实例化

ret.__dict__['name']='wusir'

print(ret.name)

View Code

2.今日内容:

1.orm的作用:

1.提供简单的规则2.自动转换sql语句。

2.但是orm语句无法进行创建数据库,需要人工进行创建。但是可以通过code对来建立数局表和数据行。

3.安装sqlalchemy :

1.使用cmd进行安装的时候经常会报错,我们可以使用离线的安装方式:但是要记住离线安装前需要把离线安装包移动到python的scripts下;

2.两个安装文件的网址:

3.在使用fcmd下的pip install 命令就可以了。

4.第一个orm程序:

importpymysqlfrom sqlalchemy.orm importsessionmaker,relationshipsfrom sqlalchemy importcreate_enginefrom sqlalchemy.ext.declarative importdeclarative_basefrom sqlalchemy importColumn,INTEGER,String,ForeignKey,UniqueConstraint,Index

Base=declarative_base()

engine=create_engine('mysql+pymysql://root:@localhost:3306/db4',max_overflow=5)class User(Base): #创建一个表的类

__tablename__='user'#创建表的名字下面是表中的数据

id=Column(INTEGER,primary_key=True,autoincrement=True)

name=Column(String(32))

email=Column(String(15))definit_db():#执行表的创建

Base.metadata.create_all(engine)

init_db()

View Code

5.通过外键将两个表进行连接:

importpymysqlfrom sqlalchemy.orm importsessionmaker,relationshipsfrom sqlalchemy importcreate_enginefrom sqlalchemy.ext.declarative importdeclarative_basefrom sqlalchemy importColumn,INTEGER,String,ForeignKey,UniqueConstraint,Index

Base=declarative_base()

engine=create_engine('mysql+pymysql://root:@localhost:3306/db4',max_overflow=5)classDepartment(Base):__tablename__='department'id=Column(INTEGER,primary_key=True,autoincrement=True)

title=Column(String(32))class User(Base): #创建一个表的类

__tablename__='user'#创建表的名字下面是表中的数据

id=Column(INTEGER,primary_key=True,autoincrement=True)

name=Column(String(32))

email=Column(String(15))

title_id=Column(INTEGER,ForeignKey('department.id'))definit_db():#执行表的创建

Base.metadata.create_all(engine)

init_db()

View Code

6.使用联合索引的操作:

__table__args__=(

UniqueConstraint('id','name',name='uxi_name'),

Index('id_dec','id','email')

)

View Code

7.对数据表进行删除操作:

definit_drop():

Base.metadata.drop_all(engine)

init_drop()

View Code

8.orm中的增操作:

1.每次增加一个数据:

definit_addone():

Session=sessionmaker(bind=engine)

session=Session()

ret1=Department(title='alex')

session.add(ret1)

session.commit()

session.close()

init_addone()

View Code

2.每次增加多条数据:

defaddmany():

ret2=[

Department(title='wusir1'),

Department(title='wusir2'),

Department(title='wusir3'),

Department(title='wusir4'),

]

session.add_all(ret2)

session.commit()

session.close()

addmany()

View Code

9.orm的查操作:

1.不带条件的查询:

defcheck():print( session.query(Department))#查看code转换成的sql语句

depart_list=session.query(Department).all()print(depart_list[1])

check()

结果为

SELECT department.id AS department_id, department.title AS department_title

FROM department

C:\python\lib\site-packages\pymysql\cursors.py:170: Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 1")

result=self._query(query)<__main__.department object at>

View Code

对于对象里面的取值我们需要使用for语句进行操作:

defcheck():print(session.query(Department)) #查看code转换成的sql语句

depart_list =session.query(Department).all()for i indepart_list:print(i.id, i.title,end=' ')

结果为

result=self._query(query)1 alex 2 wusir1 3 wusir2 4 wusir3 5 wusir4

View Code

2.带有条件的查询:

defcheck_condition():

depart_list= session.query(Department).filter(Department.id > 2)for i indepart_list:print(i.id, i.title, end=' ')

check_condition()

View Code

10.orm中的删除操作:注在进行增删改的时候都需要添加一句session.commit()否则文件无法添加到数据库中

defcheck_condition_delete():

session.query(Department).filter(Department.id> 2).delete()

session.commit()

check_condition_delete()

View Code

11.orm中的该操作:改的数据必需使用字典类型:

1 第一种方式:

defrepair_1():

session.query(Department).filter(Department.id==2).update({'title':'alwei'})

session.commit()

repair_1()

View Code

2 第二种方式

defrepair_2():

session.query(Department).filter(Department.id==6).update({Department.title:'alwei'})

session.commit()

repair_2()

View Code

3.如果我想在不改变原来值的基础上对原来的值后面添加两个字符串:

defrepair_3():

session.query(Department).update({Department.title:Department.title+'22'},synchronize_session=False)

session.commit()

repair_3()

View Code

4.对于数字类型的相加:

defrepair_4():

session.query(User).update({User.title_id:User.title_id+2},synchronize_session='evaluate')

session.commit()

repair_4()

View Code

12.查询中条件的orm操作:

1.如果两个条件之间用逗号隔开,代表and操作:

defcondition_1():

ret=session.query(Department).filter(Department.id>1,Department.title=='wusir3').all()for i inret:print(i.id,i.title)

condition_1()

View Code

2between操作;

defcondition_2():

ret=session.query(Department).filter(Department.id.between(1,3)).all()for i inret:print(i.id,i.title)

condition_2()

结果为1wusir12wusir23 wusir3

View Code

3.in操作:

defcondition_3():

ret= session.query(Department).filter(Department.id.in_([1, 3])).all()for i inret:print(i.id, i.title)

condition_3()

结果为1wusir13 wusir3

View Code

4.not in操作:

defcondition_4():

ret= session.query(Department).filter(~Department.id.in_([1, 3])).all()for i inret:print(i.id, i.title)

condition_4()

结果为2wusir24wusir45wusir16wusir27wusir38 wusir4

View Code

defcondition_5():from sqlalchemy importand_,or_

ret=session.query(Department).filter(and_(Department.id>5,Department.title=='wusir4')).all()

ret2=session.query(Department).filter(or_(Department.id>5,Department.title=='wusir4')).all()for i inret:print(i.id,i.title,end=' ')print()for i1 inret2:print(i1.id,i1.title,end=' ')

condition_5()

结果为8wusir44 wusir4 6 wusir2 7 wusir3 8wusir4

Process finished with exit code 0

View Code

5。通配符操作;

deflikeone():

ret=session.query(Department).filter(Department.title.like('wusir%')).all()for i inret:print(i.id,i.title,end=' ')

likeone()

View Code

6.限制操作:

deflimitone():

ret=session.query(Department)[1:3]for i inret:print(i.id,i.title,end=' ')

limitone()

View Code

7.排序操作:

defset_group1():

ret=session.query(Department.title).group_by(Department.title).all()print(ret)

set_group1()

结果为

[('wusir1',), ('wusir2',), ('wusir3',), ('wusir4',)]

View Code

defset_group2():

ret=session.query(Department.title,func.count(1)).group_by(Department.title).having(func.count(1)>1)print(ret)

set_group2()

结果为

SELECT department.title AS department_title, count(%(count_2)s) AS count_1

FROM department GROUP BY department.title

HAVING count(%(count_3)s) > %(count_4)s

View Code

8.联合操作使用join

SELECT user.id AS user_id, user.name AS user_name, user.email AS user_email, user.title_id AS user_title_id

FROM user INNER JOIN department ON department.id=user.title_id

结果为

SELECT user.id AS user_id, user.name AS user_name, user.email AS user_email, user.title_id AS user_title_id

FROM user INNER JOIN department ON department.id= user.title_id

View Code

9.组合操作:union

defunionone():

q1=session.query(User).filter(User.id>2)

q2=session.query(User).filter(User.id<2)

ret=q1.union(q2)

ret1=ret.all()for i inret1:print(i.id,i.name)

unionone()

结果为3uwin34uwin41 uwin1

View Code

10.临时表的制作方法:

deftempary():

q1=session.query(Department).filter(Department.id>2).subquery()

ret=session.query(q1).all()for i inret:print(i.id)

tempary()

结果为3

4

5

6

7

8

View Code

11.又是后我们需要插寻的元素为另一张表中的内容:

result=session.query(User.id,session.query(User.name).as_scalar())print(result)

结果为

SELECT user.id AS user_id, (SELECT user.name

FROM user) AS anon_1

FROM user

View Code

mysql 取最后一个数字_mysql最后一个内容orm相关推荐

  1. java演练 类与对象 给我一个数字还你一个字符串

    java演练 类与对象 给我一个数字还你一个字符串 视频 https://www.ixigua.com/i6870502014800003598/ 代码 类 public class Game {pu ...

  2. mysql 更新时间加数字_Mysql实战45讲笔记:8、聚合函数count

    count(*)的实现方式 在不同的MySQL引擎中,count()有不同的实现方式 1. MyISAM引擎把一个表的总行数存在了磁盘上,因此执行count()的时候会直接返回这个数,效率很高: 2. ...

  3. mysql取数据库时间函数_MySQL数据库—日期与时间函数

    一. 日期和时间函数 函数的概念:按指定格式输入参数,返回正确结果的运算单元 1. 返回当前日期:curdate() current_date() current_date()+0可以将当前日期转换为 ...

  4. mysql int后面的数字_mysql中整数类型后面的数字,比如int(11),11代表11个字节吗?...

    原先对mysql不太理解,但也没有报错.但理解的不够深入.这次补上. 原来以为int(11)是指11个字节,int(10)就是10个字节.我错了. http://zhidao.baidu.com/li ...

  5. mysql查询时间出来数字_mysql查询时间出来数字的解决方法

    mysql查询时间出来数字的解决方法 发布时间:2020-11-16 10:50:29 来源:亿速云 阅读:108 作者:小新 这篇文章将为大家详细讲解有关mysql查询时间出来数字的解决方法,小编觉 ...

  6. char转化为cstring_C语言100题集合001-将一个数字字符串转换为一个整数

    系列文章<C语言经典100例>持续创作中,欢迎大家的关注和支持. 喜欢的同学记得点赞收藏哦- 1 题目 题目:将一个数字字符串转换为一个整数(不得调用C语言中提供的字符串函数进行操作) 例 ...

  7. mysql怎么创建自动作业_mysql 让一个存储过程定时作业的代码

    1.在mysql 中建立一个数据库 test1 语句:create database test1 2.创建表examinfo create table examinfo( id int auto_in ...

  8. mysql下一个版本号_mysql下一个版本应该且实现并不复杂增加的常用功能

    1.innodb的auto_increment应该在参考oracle的实现方式,定期持久化(mysql 8.0支持,mariadb 10.3支持序列): 我们目前遇到个问题,出于性能考虑,我们每天会把 ...

  9. mysql 中文 3个字节_mysql里一个中文汉字占多少字节数?

    在mysql中,如果是latin1字符集下,一个中文汉字占2个字节数:如果是utf8字符集下,一个中文汉字占3个字节数:如果是gbk字符集下,一个中文汉字占2个字节数. (推荐教程:mysql视频教程 ...

最新文章

  1. 机器学习的核心要素是什么?它们分别作了什么工作?
  2. SQL SERVER 2008查看sql执行的时间
  3. (chap4 Http状态码) 3XX重定向
  4. java伪协议_JavaScript中伪协议 javascript:使用探讨
  5. 第十七章 我国农业科学技术
  6. 第二sprint总结
  7. MapTileDownloader 全能电子地图下载器
  8. 参考文献标号字体_毕业论文参考文献格式字体
  9. Cocos2d-X 3.x的具体配置详解
  10. 概率论复习笔记一——伯努利实验及相关的概率分布
  11. VRay(一)材质基础
  12. sql with ties_SQL WITH TIES子句
  13. Mac 双系统分区合并
  14. 3D游戏的碰撞检测是如何实现的?
  15. 原来发朋友圈还有这讲究,难怪我的朋友圈没人看
  16. unity 使用超椭圆方程对图片进行裁切制作圆角矩形
  17. 计算机安装过程突然断电怎么办,电脑突然断电怎么办 电脑突然断电问题解决方法...
  18. C语言探索之旅 | 第一部分第二课:工欲善其事,必先利其器
  19. Python-Sql盲注检测
  20. DIY相册的思路和welcome界面

热门文章

  1. vue 常见的新增、编辑、查看公用同一个页面
  2. LDA初探,希拉里邮件主题提取
  3. php中input的onclick,onkeydown、onkeyup、onclick、onchange、oninput、onpropertychange 的用法和区别...
  4. 中兴智能视觉大数据报道:人脸识别厉害的还在后头!
  5. 解决:Unity打包后,无法在模拟器上运行
  6. SolidWorks非标自动化设计全过程,建议收藏
  7. 基于JAVA安路友汽车租赁计算机毕业设计源码+系统+数据库+lw文档+部署
  8. 国产世界最快的计算机,开机一分钟 地球人算32年——揭秘全国产世界最快超级计算机“神威·太湖之光”...
  9. 学籍管理系统1——mantis
  10. GS+9.0地统计软件学习