【SQLAlchemy】第2节:模型类的定义与创建

1. 导包并创建Base类

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,Integer

Base = declarative_base()

注:

  • declarative_base:用于创建Base类,所有的模型类都要继承Base类,注意Base是没有实例化的类对象
  • Column:定义字段
  • String,Integer等:定义简单的字段类型

2. 定义Class类

class User(Base):
    
    __tablename__ = 'user'
    
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(16))

class News(Base):

    __tablename__ = 'news'
    
    id = Column(Integer,primary_key=True,autoincrement=True)
    name = Column(String(16))

解释:

  • __tablename__:模型类对应数据库中的表名,必须填写
  • Column:表示定义字段
    • 格式:【字段名】 = Column(【字段类型】,【约束】…)
  • String(16):varchar(16),Integer:int

注:

  • 定义主键的时候,以下两种都可以(中间表的主键必须定义autoincrement=True,普通表定义主键,只定义primary_key=True就可以)
    • id = Column(Integer,primary_key=True,autoincrement=True)
    • id = Column(Integer,primary_key=True)

3. 创建模型类(在数据库中生成这个User表)

  在数据库中创建模型类对应的表有两种方式,但只要与数据库发生交互,就必须要有连接引擎engine

3.1 创建连接引擎

from sqlalchemy import create_engine
engine = create_engine(
    'mysql+pymysql://root:12345@localhost:3306/db_sqlalchemy_notebook',
    echo=False
)

3.2 创建(第1种方法:创建指定的模型类)

User.metadata.create_all(engine) # 仅仅创建User类
News.metadata.create_all(engine) # 仅仅创建News类

3.3 创建(第2种方法:创建所有继承Base类的模型类)

Base.metadata.create_all(engine) # 这里就相当于一起创建了User类和News类,因为他们都继承了Base类

4. 完整代码总览

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,Integer

# 定义连接引擎
engine = create_engine(
    'mysql+pymysql://root:12345@localhost:3306/db_sqlalchemy_notebook',
    echo=False
)

# 创建模型基类
Base = declarative_base()

# 定义用户表
class User(Base):
    
    __tablename__ = 'user' # User模型类对应数据库中名为user的表
    
    id = Column(Integer,primary_key=True,autoincrement=True) # int类型主键,自增
    name = Column(String(16)) # varchar(16)

# 定义新闻表
class News(Base):

    __tablename__ = 'news'# News模型类对应数据库中名为news的表
    
    id = Column(Integer,primary_key=True,autoincrement=True) # int类型主键,自增
    name = Column(String(16)) # varchar(16)

# 两种创建方式,选择其一
# 第一种:
User.metadata.create_all(engine) # 仅仅创建User类
News.metadata.create_all(engine) # 仅仅创建News类

# 第二种
Base.metadata.create_all(engine) # 这里就相当于一起创建了User类和News类,因为他们都继承了Base类
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PYTED量化交易研究所

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值