资讯专栏INFORMATION COLUMN

scrapy学习之路4.1(SQLAlchemy的使用)(未完)

shengguo / 2813人阅读

摘要:是编程语言下的一款框架,该框架建立在数据库之上,使用关系对象映射进行数据库操作,简言之便是将对象转换成,然后使用数据执行并获取执行结果。正确使用的前提是了解关系数据库的原理。就是把数据库表的行与相应的对象建立关联,互相转换。

sqlalchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。

SQLAlchemy本身无法操作数据库,其必须以pymsql等第三方插件,Dialect用于和数据API进行交流,根据配置文件的不同调用不同的数据库API,从而实现对数据库的操作。

</>复制代码

  1. MySQL-Python
  2. mysql+mysqldb://:@[:]/
  3. pymysql
  4. mysql+pymysql://:@/[?]
  5. MySQL-Connector
  6. mysql+mysqlconnector://:@[:]/
  7. cx_Oracle
  8. oracle+cx_oracle://user:pass@host:port/dbname[?key=value&key=value...]

底层处理

使用 Engine/ConnectionPooling/Dialect 进行数据库操作,Engine使用ConnectionPooling连接数据库,然后再通过Dialect执行SQL语句。

</>复制代码

  1. #!/usr/bin/env python
  2. # -*- coding:utf-8 -*-
  3. from sqlalchemy import create_engine
  4. engine = create_engine("mysql+pymysql://root:123@127.0.0.1:3306/t1", max_overflow=5)
  5. # 执行SQL
  6. # cur = engine.execute(
  7. # "INSERT INTO hosts (host, color_id) VALUES ("1.1.1.22", 3)"
  8. # )
  9. # 新插入行自增ID
  10. # cur.lastrowid
  11. # 执行SQL
  12. # cur = engine.execute(
  13. # "INSERT INTO hosts (host, color_id) VALUES(%s, %s)",[("1.1.1.22", 3),("1.1.1.221", 3),]
  14. # )
  15. # 执行SQL
  16. # cur = engine.execute(
  17. # "INSERT INTO hosts (host, color_id) VALUES (%(host)s, %(color_id)s)",
  18. # host="1.1.1.99", color_id=3
  19. # )
  20. # 执行SQL
  21. # cur = engine.execute("select * from hosts")
  22. # 获取第一行数据
  23. # cur.fetchone()
  24. # 获取第n行数据
  25. # cur.fetchmany(3)
  26. # 获取所有数据
  27. # cur.fetchall()

ORM

ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换。 正确使用ORM的前提是了解关系数据库的原理。 ORM就是把数据库表的行与相应的对象建立关联,互相转换。 由于关系数据库的多个表还可以用外键实现一对多、多对多等关联,相应地, ORM框架也可以提供两个对象之间的一对多、多对多等功能。

1.创建表

</>复制代码

  1. create_engine方法参数("使用数据库+数据库链接模块://数据库用户名:密码@ip地址:端口/要连接的数据库名称?charset=utf8",echo=True表示是否查看生成的sql语句,max_overflow=5)
  2. max_overflow=5 表示最大连接数
  3. declarative_base()创建一个SQLORM基类
  4. Column()设置字段属性
  5. create_all()向数据库创建指定表
  6. 创建表数据类型
  7. 整数型:TINYINT,SMALLINT,INT,BIGINT
  8. Boolean()对应TINYINT
  9. Integer()对应INT
  10. SMALLINT()对应SMALLINT
  11. BIGINT()对应BIGINT
  12. 浮点型:FLOAT,DOUBLE,DECIMAL(M,D)
  13. DECIMAL()对应DECIMAL
  14. Float()对应FLOAT
  15. REAL()对应DOUBLE
  16. 字符型:CHAR,VARCHAR
  17. String(40)对应VARCHAR
  18. CHAR()对应CHAR
  19. 日期型:DATETIME,DATE,TIMESTAMP
  20. DATETIME()对应DATETIME
  21. DATE()对应DATE
  22. TIMESTAMP()对应TIMESTAMP
  23. 备注型:TINYTEXT,TEXT,
  24. Text()对应TEXT
  25. UnicodeText(10)对应TINYTEXT
  26. ##############################################################################
  27. # -*- coding:utf-8 -*-
  28. import sqlalchemy
  29. from sqlalchemy.ext.declarative import declarative_base
  30. from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
  31. from sqlalchemy.orm import sessionmaker, relationship
  32. from sqlalchemy import create_engine
  33. engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/project_db", echo=True)
  34. Base = declarative_base()
  35. class People(Base):
  36. __tablename__ = "people" # 表名
  37. id = Column(Integer, primary_key=True, autoincrement=True)
  38. name = Column(String(16), nullable=False)
  39. age = Column(Integer, nullable=False)
  40. job = Column(String(16), nullable=False)
  41. salary = Column(Integer, nullable=False)
  42. Base.metadata.create_all(engine) # 新建表
  43. # Base.metadata.drop_all(engine) # 删除表

primary_key=True主键索引
autoincrement=True自增字段
index=True给当前字段创建普通索引
unique=True给当前字段创建唯一索引
UniqueConstraint("字段","字段",name="索引名称")创建唯一组合索引
Index("索引名称","字段","字段")创建普通组合索引
default="abc"设置字段默认值,不怎么可靠
ForeignKey("连接表名称.连接表主键字段")设置外键链表
nullable=False类容不能为空


创建外键表

</>复制代码

  1. # -*- coding:utf-8 -*-
  2. import sqlalchemy
  3. from sqlalchemy.ext.declarative import declarative_base
  4. from sqlalchemy import Column, Integer, String, ForeignKey, UniqueConstraint, Index
  5. from sqlalchemy.orm import sessionmaker, relationship
  6. from sqlalchemy import create_engine
  7. engine = create_engine("mysql+mysqlconnector://root:123456@127.0.0.1:3306/project_db", echo=True)
  8. Base = declarative_base()
  9. class People(Base):
  10. __tablename__ = "people"
  11. id = Column(Integer, primary_key=True, autoincrement=True)
  12. name = Column(String(16), nullable=False)
  13. age = Column(Integer, nullable=False)
  14. job = Column(String(16), nullable=False)
  15. salary = Column(Integer, nullable=False)
  16. books = relationship("book") # 这里的book为小写
  17. class Book(Base):
  18. __tablename__ = "book"
  19. id = Column(Integer, primary_key=True, autoincrement=True)
  20. name = Column(String(16), nullable=False)
  21. author = Column(String(16), nullable=False)
  22. people_id = Column(Integer, ForeignKey("people.id")) # 这里的people为小写
  23. Base.metadata.create_all(engine) # 新建表
  24. #Base.metadata.drop_all(engine) # 删除表
创建多对多

</>复制代码

  1. class Server(Base):
  2. __tablename__ = "server"
  3. id = Column(Integer, primary_key=True, autoincrement=True)
  4. hostname = Column(String(8))
  5. class Group(Base):
  6. __tablename__ = "group"
  7. id = Column(Integer, primary_key=True, autoincrement=True)
  8. name = Column(String(16), unique=True)
  9. class ServertoGroup(Base):
  10. __tablename__ = "servertogroup"
  11. id = Column(Integer, primary_key=True, autoincrement=True)
  12. server_id = Column(Integer, ForeignKey("server.id"))
  13. group_id = Column(Integer, ForeignKey("group.id"))

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41254.html

相关文章

  • 21、 Python快速开发分布式搜索引擎Scrapy精讲—爬虫数据保存

    摘要:百度云搜索,搜各种资料搜网盘,搜各种资料注意数据保存的操作都是在文件里操作的将数据保存为文件是一个信号检测导入图片下载器模块定义数据处理类,必须继承初始化时打开文件为数据处理函数,接收一个,里就是爬虫最后来的数据对象文章标题是 【百度云搜索,搜各种资料:http://www.bdyss.cn】 【搜网盘,搜各种资料:http://www.swpan.cn】 注意:数据保存的操作都是在p...

    Alex 评论0 收藏0
  • scrapy爬虫使用总结——技巧和天坑

    摘要:简介爬虫这个东西我就不多做介绍了,总之是一个很好用的爬虫库,且关于也有较多的教程。这篇文章记录一下我个人的项目规划和天坑心得。然后执行就会自动去爬数据了。常用配置这里要结合一些原因来进行说明。 简介 scrapy爬虫这个东西我就不多做介绍了,总之是一个很好用的Python爬虫库,且关于scrapy也有较多的教程。这篇文章记录一下我个人的项目规划和天坑心得。 通常来说,我们执行了scra...

    vvpvvp 评论0 收藏0
  • scrapy 学习之路那些坑

    摘要:前言本文记录自己在学习当中遇到的各种大小问题,持续更新。错误分析本身是一个网络引擎框架,的运行依赖于。在打开新建的项目后,报错显示。错误分析的默认依赖项当中没有,或者说默认查找的路径中找不到。 前言 本文记录自己在学习scrapy当中遇到的各种大小问题,持续更新。 环境简介: 语言版本 爬虫框架 IDE 系统 python3.5 scrapy1.4.0 pycharm win1...

    xiaodao 评论0 收藏0
  • scrapy学习之路2(图片下载与下载路径获取)

    摘要:图片下载和拿到下载后的路径小封面图的爬取,后面通过传到中详情页的爬取详情页的完整地址下一页的爬取与请求不明打开功能注意如要进一步定制功能补充新建 图片下载和拿到下载后的路径 1 items.py import scrapy class InfoItem(scrapy.Item): url = scrapy.Field() url_object_id = scrapy....

    WelliJhon 评论0 收藏0
  • scrapy学习之路1(简单例子)

    摘要:的安装环境是后面创建用来运行的名网站域名在创建可以通过此文件运行本文件名父文件名路径和父文件名设置环境,必须以上运行可能在下会报错准备工作完在下获取列表页每一个的把获取到的交给 scrapy的安装 环境:python3.6 1 pip install -i https://pypi.douban.com/simple/ scrapy 2 scrapy startpr...

    guqiu 评论0 收藏0

发表评论

0条评论

shengguo

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<