#
一、声明模型
首先我们定义了模块级结构,这些结构将形成我们将从数据库中查询的结构。这种结构称为 声明性映射
,讲白了其实就是SQL
表中存在的元数据。
from sqlalchemy import Column
from sqlalchemy import ForeignKey
from sqlalchemy import Integer
from sqlalchemy import String
from sqlalchemy.orm import declarative_base
from sqlalchemy.orm import relationship
Base = declarative_base()
class User(Base):
__tablename__ = "user"
id = Column(Integer, primary_key=True)
name = Column(String(30))
fullname = Column(String)
addresses = relationship(
"Address", back_populates="user", cascade="all, delete-orphan"
)
def __repr__(self):
return f"User(id={self.id!r}, name={self.name!r}, fullname={self.fullname!r})"
class Address(Base):
__tablename__ = "address"
id = Column(Integer, primary_key=True)
email_address = Column(String, nullable=False)
user_id = Column(Integer, ForeignKey("user.id"), nullable=False)
user = relationship("User", back_populates="addresses")
def __repr__(self):
return f"Address(id={self.id!r}, email_address={self.email_address!r})"
信息注释:
Column
表示数据库表中的列。primary_key
设置字段为主键ForeignKey
设置字段为外键nullable
可为空,意思是可为空值relationship
提供两个映射类之间的关系back_populates
是指定和哪个类作映射关系cascade
级联,可理解意思就是主表数据被删除,关联的子表跟随操作
二、建立连接
from sqlalchemy import create_engine
_SQLALCHEMY_DATABASE_URL = "mysql+pymysql://root:123456@192.168.0.110:3306/sqlalchemy_db"
engine = create_engine(
# echo=True参数表示连接发出的 SQL 将被记录到标准输出
# future=True是为了方便便我们充分利用sqlalchemy2.0样式用法
_SQLALCHEMY_DATABASE_URL, echo=True, future=True
)
信息注释:
- 这里就是定义一个连接数据库的变量
- 调用
creat_engine
方法来连接指定的数据库
三、创建数据表
Base.metadata.create_all(engine)
信息注释: