【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类

猜你喜欢

转载自blog.csdn.net/kzl_knight/article/details/103086552
今日推荐