介绍
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()