1. 介绍
sqlalchemy 是一款ORM框架,可以将关系型数据库的表映射成类,将表里的每条记录映射成类的实例对象,使用其提供的api,实现了通过对类进行操作进而操作数据库。这里需要明确,sqlalchemy 本身不会直接操作数据库,而是借助已有的可以操作数据库的库进行操作,例如pymysql。
2. 常用的参数说明
2.1 数据类型(定义列的时候用到)
类型名 |
python中的类型 |
说明 |
Integer |
int |
普通整数,32位置 |
SmallInteger |
int |
普通整数,16位 |
BigInteger |
int 或 long |
不限制精度的整数 |
Float |
float |
浮点数 |
Numeric |
decimal.Decimal |
普通整数,32位 |
String |
str |
变长字符串 |
Text |
str |
变长字符串,对较长或者不限长度的字符串做了优化 |
Boolean |
boolean |
布尔值 |
Date |
datetime.date |
时间 |
Time |
datetime.datetime |
日期时间 |
LargeBinary |
str |
二进制文件 |
2.2 表选项(定义列的时候用到)
选项名 |
说明 |
primary_key |
布尔类型,为True时,设置该列为主键 |
unique |
布尔类型,为True时,表示该列为不可有重复值 |
index |
布尔类型,为True时,设置该列为索引 |
nullable |
布尔类型,为True时,表示该列不可为空值 |
default |
为该列设置默认值 |
comment |
为该列加注释 |
3. DDL操作
3.1 创建表
Base.metadata.create_all(engine)
from random import random
import pytest
from sqlalchemy import create_engine, Column, Integer, String, Float, and_, or_, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
"""
引擎:实际用来操作数据库的
"""
@pytest.fixture(scope="session")
def engine():
return create_engine("mysql+pymysql://root:123456@127.0.0.1:3306/supermarket?charset=utf8mb4", max_overflow=5)
@pytest.fixture(scope="session")
def session(engine):
return sessionmaker(bind=engine)()
"""
映射类:一张表映射成一个类
"""
Base = declarative_base()
class Computer(Base):
__tablename__ = "computer"
id = Column(Integer, primary_key=True, auto_increament=True)
name = Column(String(20))
desc = Column(String(100))
price = Column(Float)
def __repr__(self):
tpl = f"Computer(id={
self.id}, name={
self.name}, desc={
self.desc}, price={
self.price})"
return tpl
class Phone(Base):
__tablename__ = "phone"
id = Column(Integer, primary_key=True, auto_increment=True, comment="主键")
name = Column(String(20), comment="手机名称")
desc = Column