请选择 进入手机版 | 继续访问电脑版

Ai编程

查看: 354|回复: 1

少儿编程教程之PYTHON网络爬虫辅助工具ORM框架快速入门

[复制链接]
  • TA的每日心情
    开心
    2020-3-7 12:07
  • 10

    主题

    20

    帖子

    175

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    175
    发表于 2017-2-13 17:54:03 | 显示全部楼层 |阅读模式
    08.png
    今天为大家介绍的这个ORM框架就是用来操作数据库的。
    SQLAlchemy框架介绍与安装
    SQLAlchemy是Python编程语言下的一款开源软件,提供SQL工具包以及对象-关系映射工具,使用MIT许可证发行。它的一个目标是提供能兼容众多数据库(如SQLite,MySql,Postgres,Oracle,MS-SQL,SQLServer和Firebird)的企业级持久性模型。
    1. SQLAlchemy的安装
    我们通过如下命令安装:
    pip install SQLAlchemy
    如果安装比较慢或者失败可以用试试更换一下源,如下:
    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple SQLAlchemy
    使用SQLAlchemy连接数据库实质上还是通过数据库接口实现连接,安装SQLAlchemy后还需要安装对应数据库的接口模块,下面以MySql为例安装pymysql:
    pip install pymysql
    安装完成后我们在命令行窗口中导入模块来测试是否安装成功:

    2. SQLAlchemy在Python中操作数据库
    SQLAlchemy连接数据库使用数据库链接池技术,原理是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立,断开都是由连接池自身来管理。同时,还可以通过设置连接池参数来控制连接池中的初始连接数,连接的上下限数以及每个连接的最大使用次数,最大空闲时间等。也可以通过其自身的管理机制来监视数据库连接的数量以及使用情况等。
    说完原理后,我没来看看SQLAlchemy连接数据库的代码:
    from sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:pwd@localhost:3306/test?charset=utf8",echo=True)1)mysql+pymysql://root:pwd@localhost:3306/test:mysql指明数据库系统类型,pymysql是连接数据库接口的模块,root是数据库用户名,pwd是数据库密码,localhost:3306是本地数据库和端口号,test是数据库名。
    2)echo=True:用于显示SQLAlchemy在操作数据库时所执行的SQL语句情况,相当于一个监视器,可以清楚知道执行情况。
    其他数据库的连接:
    数据库
    连接字符串

    Microsoft SQL Severmssql+pymssql://usename:pwd@ip:port/dbname
    MySqlmysql+pymysql://username:pwd@ip:port/dbname
    Oraclecx_Oracle://username:pwd@ip:port/dbname
    PostgreSQLpostgresql://username:pwd@ip:port/dbname
    SQLitesqlite://file_path创建数据库表
    我们在连接好数据库后,接下来就是创建数据库表了,接下来为大家演示如何用SQLAlchemy创建表:
    # 连接数据库from sqlalchemy import create_engineengine = create_engine("mysql+pymysql://root:root@localhost:3306/test?charset=utf8",echo=True)# 创建数据库from sqlalchemy import Column, Integer, String, DateTime # 常用数据类型from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class mytable(Base):    # 表名    __tablename__ = "mytable"    # 字段,属性    id = Column(Integer, primary_key = True)    name = Column(String(10), unique = True)    age = Column(Integer)    brith = Column(DateTime)    class_name = Column(String(50))Base.metadata.create_all(engine)
    _tablename_ = “mytable”可以省略,如果省略那么表名和类名就是一样的。类中的属性就是数据中的字段名以及类型。最后通过Base.metadata.create_all(engine)在数据库中创建对应的数据库表。
    如果要删除数据表可以通过如下代码:
    # 先删除类,后删除数据库表mytable.drop(bind = engine)Base.metadata.drop_all(engine)
    无论是创建还是删除都需要先对数据进行连接,即创建engine对象。
    添加数据
    完成数据表的创建后,接下来我们就可以进行数据的操作。首先创建一个会话对象,用于执行SQL语句,代码如下:
    from sqlalchemy.orm import sessionmakerDBSession = sessionmaker(bind = engine)session = DBSession()
    我们常用的增,删,改,查在SQLAlchemy中有固定的语法支持。
    new_data = mytable(name = 'Tango', age = 10, birth='2019-10-05', class_name = '三年一班')session.add(new_data)session.commit()session.close()更新数据
    • 使用update方法更新数据session.query(mytable).filter_by(id=1).update({mytable.age:12})session.commit()session.close()
      首先我们查找到id为1的数据,然后对这条数据的age进行修改。
    • 使用赋值方式更新:get_data = session.query(mytable).filter_by(id=1).first()get_data.class_name = '三年二班'session.commit()session.close()
      这种方式通常用于做单条数据的更新,如果要批量更新那么update的性能会更好一些。

    查询数据
    • 查询所有数据get_data = session.query(mytable).all()for i in get_data:    print('我的名字' + i.name)    print('我的班接' + i.class_name)session.close()
      这种写法相当于sql中的:
      select * from mytable;
      all()的返回类型是列表。
    • 查询指定字段get_data = session.query(mytable.name, mytable.class_name).all()for i in get_data:    print('我的名字' + i.name)    print('我的班接' + i.class_name)session.close()
      我们只需要将要查的字段传入query中。
    • 设置筛选条件get_data = session.query(mytable.name, mytable.class_name).filter_by(id=1).all()for i in get_data:    print('我的名字' + i.name)    print('我的班接' + i.class_name)session.close()
      filter_by(id=1)指定的是查询对象id为1的那条数据。
      如果要获取查询结果中的第一天只需要将all()替换成first()就可以了。
      • and多条件查询get_data = session.query(mytable.name, mytable.class_name).filter(mytable.id>2, mytable.name=='Tango').first()print('我的名字' + get_data.name)print('我的班接' + get_data.class_name)
      • or条件查询from sqlalchemy import or_session.query(mytable).filter(or_(mytable.id>2, mytable.name=='Tango')).all()
        需要引入or_
      • 多表查询get_data = session.query(mytable).join(mytable2).filter(mytable.id>=2).all()
        join为内连,如果需要使用外连把join换成outerjoin就好。
        如果执行的sql语句很复杂我们也可以直接调用原生的SQL语句
        sql = "select * from mytable "session.excute(sql)session.commit()

    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    4

    帖子

    26

    积分

    新手上路

    Rank: 1

    积分
    26
    发表于 2020-5-15 15:51:52 | 显示全部楼层
    手游页游版本定制服务端07cg.comQQ1325876192倚天dnf复古手游传奇一条龙

    冒险岛开服程序惊天动地开服程序热血江湖开服程序问道开服程序密传开服程序
    火线任务(Heat Project)开服程序飞飞OL开服程序洛汗开服程序天之炼狱开服程序
    丝路传说开服程序大话西游开服程序蜀门开服程序机战开服程序剑侠情缘开服程序
    绝对女神开服程序传说OL开服程序刀剑开服程序弹弹堂开服程序科洛斯开服程序
    天龙开服程序奇迹Mu开服程序魔兽开服程序魔域开服程序墨香开服程序
    天堂2开服程序传奇3开服程序英雄王座开服程序千年开服程序征途开服程序
    新魔界开服程序骑士开服程序烈焰开服程序破天开服程序决战开服程序
    美丽世界开服程序乱勇OL开服程序倚天2开服程序完美世界开服程序征服开服程序
    天堂开服程序传世开服程序真封神开服程序劲舞团开服程序天上碑开服程序
    永恒之塔开服程序仙境RO开服程序诛仙开服程序神泣开服程序石器开服程序
    魔力宝贝开服程序武林外传开服程序网页游戏开服程序页游开服程序希望OL开服程序
    成吉思汗开服程序剑侠世界开服程序全民奇迹开服程序挑战OL开服程序
    红月开服程序十二之天(江湖OL)开服程序倚天开服程序dnf开服程序

    力争做到传奇私服一条龙最TOP公司,cqsf最信誉的一条龙制作商,GM开服必选老品牌,用诚信和技术实力赢得客户,这里不强制广告,不强制充值平台。很多被骗后才来我这。不管你上多少钱广告都与我无关!充值平台随便选,不存在黑单!主营项目:手游端游页游套餐版本一条龙开区+服务器租用+网站论坛建设+广告宣传代理
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋| Ai编程  

    GMT+8, 2021-4-12 19:51 , Processed in 0.055366 second(s), 31 queries .

    Powered by Ai-coding X3.2

    © 2015-2020 Ai-coding.Co.

    快速回复 返回顶部 返回列表