【Flask】数据的CRUD之增加和查询操作

在人生的道路上,不管是潇洒走一回,或者是千山独行,皆须是自己想走的路,虽然,有的人并不是很快就能找到自己的方向和道路,不过,只要坚持到底,我相信,就一定可以找到自己的路,只要找到路,就不必怕路途遥远了。

导读:本篇文章讲解 【Flask】数据的CRUD之增加和查询操作,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

用session做数据的增删改查操作:

1、创建模型类,生成数据表

#第一步:创建基类
Base=declarative_base(engine)

#第二步:定义python类和表的映射
class Person(Base):
    __tablename__='t_person'  #创建表名,最好是t_开头
    id=Column(name='id',type_=Integer,primary_key=True,autoincrement=True)
    name=Column(name='name',type_=String(255))
    age=Column(name='age',type_=Integer)
    address=Column(name='address',type_=String(255))
    country=Column(name='country',type_=String(50))  #创建表之后新加的字段
    city=Column(name='city',type_=String(50))        #创建表之后新加的字段

     def __str__(self):
        return '姓名:{}-年领:{}-地址:{}-国家:{}-城市:{}'.format(self.name,self.age,self.address,self.country,self.city)


#第三步:模型类创建表
#Base.metadata.drop_all()
Base.metadata.create_all()

2、 构建session对象:

所有和数据库的ORM操作都必须通过一个叫做session的会话对象来实现
通过以下代码来获取会话对象:

from sqlalchemy.orm import sessionmaker
engine = create_engine(DB_URI)
Base = declarative_base(engine)
session = sessionmaker(engine)() # 注意,返回的是一个函数

特别注意1:session = sessionmaker(engine)() 返回的是一个函数

3、增加数据(C)

增加一条数据

#创建对象,也即创建一条数据:
p1=Person(name='zz',age=20,address='丰台区',country='中国',city='北京')
# 将这个对象添加到`session`会话对象中:
session.add(p1)
# 将session中的对象做commit操作(提交)
session.commit()

一次性增加多条数据

#添加数据到数据库
p1=Person(name='django',age=17,address='丰台区',country='中国',city='北京')
p2=Person(name='kb',age=21,address='大兴区',country='中国',city='北京')
p3=Person(name='python',age=18,address='昌平区',country='中国',city='北京')
p4=Person(name='flask',age=25,address='海淀区',country='中国',city='北京')
session.add_all([p1,p2,p3,p4])
session.commit()

在这里插入图片描述

4、查找数据

1、查找模型对应的表中所有的数据

all_person=session.query(Person).all()
for person in all_person:
    print(person)
姓名:zz-年领:20-地址:丰台区-国家:中国-城市:北京
姓名:django-年领:17-地址:丰台区-国家:中国-城市:北京
姓名:kb-年领:21-地址:大兴区-国家:中国-城市:北京
姓名:python-年领:18-地址:昌平区-国家:中国-城市:北京
姓名:flask-年领:25-地址:海淀区-国家:中国-城市:北京

2、使用first方法获取结果集中的第一条数据

p1=session.query(Person).first()
print(p1)
姓名:zz-年领:20-地址:丰台区-国家:中国-城市:北京

3、使用filter来做条件查询
例如:查询年领在20岁以上的人物信息

p2=session.query(Person).filter(Person.age>20)
print(p2)

打印结果:是一条sql语句

SELECT t_person.id AS t_person_id, t_person.name AS t_person_name, t_person.age AS t_person_age, t_person.address AS t_person_address, t_person.country AS t_person_country, t_person.city AS t_person_city 
FROM t_person 
WHERE t_person.age > %(age_1)s

注意2:只有加上first,all函数才会返回具体的数据,不然只打印出sql语句

p3=session.query(Person).filter(Person.age>20).all()
for p in p3:
    print(p)
姓名:kb-年领:21-地址:大兴区-国家:中国-城市:北京
姓名:flask-年领:25-地址:海淀区-国家:中国-城市:北京

4、使用filter_by来做条件查询

p4=session.query(Person).filter_by(age=20).all()
for p in p4:
   print(p)
姓名:zz-年领:20-地址:丰台区-国家:中国-城市:北京

五、filter过滤条件:

过滤是数据提取的一个很重要的功能,以下对一些常用的过滤条件进行解释,并且这些过滤条件都是只能通过filter方法实现的:
特别注意3:filter:用模型类名.属性名==’属性值’的方式过滤查询

1.equals :

查询名字叫python的人物信息

p5=session.query(Person).filter(Person.name=='python').all()
print(p5)

2.not equals : !

查询名字不叫flask的人物信息

p6=session.query(Person).filter(Person.name!='flask').all()
print(p6)

3.like & ilike [不区分大小写]:

查询名字包含an的人物信息

p7=session.query(Person).filter(Person.name.like('%an%')).all()
print(p7)

4. in_:

查询地区为海淀区和昌平区下的人物信息

p8=session.query(Person).filter(Person.address.in_(['昌平区','海淀区'])).all()
print(p8)

5. not in:

查询地区不是海淀区和昌平区下的任务信息

p9=session.query(Person).filter(~Person.address.in_(['昌平区','海淀区'])).all()
print(p9)

6. is null:

查询年领为None的人物信息

p10=session.query(Person).filter(Person.age==None).all()
print(p10)
或者
p11=session.query(Person).filter(Person.age.is_(None)).all()
print(p11)

7. is not null:

查询年领不为None的人物信息

p12=session.query(Person).filter(Person.age!=None).all()
print(p12)
p13=session.query(Person).filter(Person.age.isnot(None)).all()
print(p13)

8. and_:

查询姓名是python,并且年领为20岁的人物信息

p14=session.query(Person).filter(Person.name=='python',Person.age=='20').all()
print(p14)
或者
p15 = session.query(Person).filter(and_(Person.name == 'python', Person.age == '20')).all()
print(p15)
或者
p16= session.query(Person).filter(Person.name == 'python').filter(Person.age=='20').all()
print(p16)

9. or_:

查询姓名是python,或者年领为18岁的人物信息

p17=session.query(Person).filter(or_(Person.name=='python',Person.age=='20')).all()
print(p17)

特别注意4:上面的and_、or_都需要导入

from sqlalchemy import and_,or_

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由半码博客整理,本文链接:https://www.bmabk.com/index.php/post/123405.html

(0)

相关推荐

发表回复

登录后才能评论
半码博客——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!