python 操作三大主流数据库 第四课ORM模型操作数据库

python 操作三大主流数据库 第四课

tags:

  • python3
  • 慕课网

categories:

  • python3
  • mysql
  • ORM
  • SQLAlchemy

第一节 ORM介绍

1. ORM的简单介绍

1. 直接百度就行了。
2. ORM是对象关系映射(Object/Relation Mapping,简称ORM)
3. 把数据库中的表变成代码中的对象。增删改查操作就是对对象的操作

2. ORM主要实现

1. SqlObject
2. peewee
3. Django's ORM
4. SQLAlchemy : www.sqlalchemy.org (可以下载下来看)

第二节 ORM安装和配置

1. SQLAlchemy安装

1. pip install -i https://pypi.douban.com/simple/ SQLAlchemy
2. 测试是否安装:import sqlalchemy sqlalchemy.__version__
3. 官方文档:https://docs.sqlalchemy.org/en/latest/core/tutorial.html

第三节 模型介绍

1. 常见数据类型

1. Integer Float Boolean ForeignKey Date/DateTime String
2. 常见数据类型文档:http://docs.sqlalchemy.org/en/latest/core/

2. 新建ORM模型

# ORM 链接数据库
from sqlalchemy import create_engine
# pymysql需要加上
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/news?charset=utf8')
# 模型声明(声明的class 都是继承他)
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
# class需要使用到的数据类型
from sqlalchemy import Column, Integer, String, DateTime, Boolean


class News(Base):
    ''' 新闻类型 '''
    __tablename__ = 'news'
    id = Column(Integer, primary_key=True)
    #id = Column('news_id',Integer, primary_key=True) 字段名别名
    title = Column(String(200), nullable=False)
    content = Column(String(2000), nullable=False)
    types = Column(String(10), nullable=False)
    image = Column(String(300))
    author = Column(String(20))
    view_count = Column(Integer)
    created_at = Column(DateTime)
    is_valid = Column(Boolean)


# 创建表 帮我们把些sql的工作都完成了
News.metadata.create_all(engine)
# 如果报错Warning: (1366, "Incorrect string value: '\\xD6\\xD0\\xB9\\xFA\\xB1\\xEA...' for column 'VARIABLE_VALUE' at row 489") 不用管它 它是Mysql版本自带的警告 不影响建表

3. ORM模型新增数据

1. 在上面2的链接的基础上。插入绑定了链接引擎
from sqlalchemy.orm import sessionmaker
Session = sessionmaker(bind=engine)

class OrmTest(object):

    def __init__(self):
        self.session = Session()

    def add_one(self):
        ''' 添加数据 '''
        new_obj = News(
            title='标题1',
            content='内容1',
            types="百家"
        )
        self.session.add(new_obj)
        self.session.commit()
        return new_obj   # 每一个条记录都是一个class


def main():
    obj = OrmTest()
    rest = obj.add_one()
    print(rest.id)


if __name__ == '__main__':
    main()
    # 我们也可以同时添加多条数据
    # session.add_all([item1, item2, item3])

4. ORM模型查询数据

    def get_one(self):
            return self.session.query(News).get(1)  # 查询id为1的数据

    def get_more(self):
        """  获取多条数据  """
        return self.session.query(News).filter_by(is_valid=True)  # 查询没有删除的 即 is_valid =1
        
def main():
    obj = OrmTest()
    # rest = obj.get_one()
    # if rest:
    #     print('ID:{0}->{1}'.format(rest.id, rest.title))
    # else:
    #     print('Not exist')
    rest = obj.get_more()
    print(rest.count())
    for new_obj in rest:
        print('ID:{0}->{1}'.format(new_obj.id, new_obj.title))

if __name__ == '__main__':
	main()

4. ORM模型修改删除数据

       def update_data(self, pk):
        """ 修改单条数据 """
        new_obj = self.session.query(News).get(pk)
        if new_obj:
            # 逻辑删除
            new_obj.is_valid = 0
            self.session.add(new_obj)
            self.session.commit()
            return True
        return False  # 如果有数据就修改数据返回True,没有数据就直接返回False

    def update_data_more(self):
        """ 修改多条数据 """
        # data_list = self.session.query(News).filter_by(is_valid = False)
        data_list = self.session.query(News).filter(News.id >= 5)
        for item in data_list:
            item.is_valid = 1
            self.session.add(item)
        self.session.commit()
        pass

    def delete_data(self, pk):
        """ 删除单条数据  """
        # 获取删除的数据
        new_obj = self.session.query(News).get(pk)
        self.session.delete(new_obj)
        self.session.commit()

    def delete_data_more(self):
        """ 删除多条数据  """
        data_list = self.session.query(News).filter(News.id >= 5)
        for item in data_list:
            self.session.delete(item)
        self.session.commit()
        pass
        
        
def main():
    obj = OrmTest()
    #obj.update_data(1)
    #obj.update_data_more()
    #obj.delete_data(20)
    obj.delete_data_more()

if __name__ == '__main__':
	main()
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值