Python爬虫-SQLAlchemy模块

4月 27, 2020

介绍

ORM技术:Object-Relational Mapping,把关系数据库的表结构映射到对象,无需了解原生sql语法。
在Python中,最有名的ORM框架是SQLAlchemy,更方便的操作数据库。

安装Requests模块

pip install sqlalchemy

数据类型

SQLAlchemy数据类型 对应SQL数据类型 说明
Integer int 整型
Float float 浮点类型
Double double 双精度浮点类型
String varchar 可变字符类型
Boolean tinyint 布尔类型
DECIMAL decimal 定点类型。是专门为了解决浮点类型精度丢失的问题的,第一个参数是用来标记这个字段总能能存储多少个数字,第二个参数表示小数点后有多少位。
Enum enum 枚举类型
Date date 存储时间,只能存储年月日
DateTime datetime 存储时间,可以存储年月日时分秒毫秒等
Time time 存储时间,可以存储时分秒
Text text 存储长字符串
LONGTEXT longtext 长文本类型

使用方法

# 导入第三方包:
from sqlalchemy import Column, String, create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建对象的基类:
Base = declarative_base()

# 定义类,并继承Base,多个表创建多个类:
class User(Base):
    # 表的名字:
    __tablename__ = 'user'

    # 表的结构,不同类型需导入不同类型包:
    id = Column(String(length=20), primary_key=True, autoincrement=True)
    name = Column(String(20),nullable=False)
    # 一对多:
    books = relationship('Book')
class Book(Base):
    __tablename__ = 'book'

    id = Column(String(20), primary_key=True)
    name = Column(String(20))
    # “多”的一方的book表是通过外键关联到user表的:
    user_id = Column(String(20), ForeignKey('user.id'))
# 初始化数据库连接,[数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名]:
engine = create_engine('mysql+pymysql://root:password@localhost:3306/test')
# 操作数据库,需要我们创建一个session:
DBSession = sessionmaker(bind=engine)
# 创建数据表,User类.metadata.create_all(engine)
User.metadata.create_all(engine)


# 数据操作:

# 创建session对象:
session = DBSession()
# 创建新User对象:
new_user = User(id='5', name='Bob')
# 添加到session:
session.add(new_user)
# 提交即保存到数据库:
session.commit()
# 创建Query查询,filter是where条件,最后调用one()返回唯一行,如果调用all()则返回所有行:
user = session.query(User).filter(User.id=='5').one()
# 关闭session:
session.close()