declarative_base

declarative_base是SQLAlchemy库中的一个函数,它用于构建ORM(Object-Relational Mapping,对象关系映射)的基础类,是使用SQLAlchemy的ORM方式定义数据库模型的核心部分。当你在Python应用中使用SQLAlchemy来与数据库交互时,declarative_base可以帮助你以一种更面向对象的方式定义数据库表结构

具体来说,declarative_base的工作原理如下:

  1. 创建基础类: 当你调用declarative_base()时,SQLAlchemy会为你创建一个类(通常称为Base),这个类将成为所有数据库模型(表)的基类。这个基类包含了连接数据库、定义表结构、映射Python类到数据库表等功能所需的方法和属性。

  2. 定义模型: 通过继承这个Base类,可以定义自己的模型类,每个模型类对应数据库中的一张表。在模型类中,可以定义类属性来表示表中的列,以及使用SQLAlchemy提供的各种装饰器和类方法来定义表之间的关系、索引等。

  3. 映射: SQLAlchemy使用元数据(metadata)来跟踪所有定义的表和它们的属性。当你定义好模型并创建了表实例后,SQLAlchemy会自动处理将这些Python类映射到数据库的实际表结构上。

from sqlalchemy import create_engine, Column, Integer, String, DateTime
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
import datetime
from config.config import BaseConfig
from sqlalchemy import create_engine

cfg_base = BaseConfig
DATABASE_URL = cfg_base.SQLALCHEMY_DATABASE_URI
engine = create_engine(DATABASE_URL, echo=True)

# 创建声明基类
Base = declarative_base()

# 定义数据库模型类
class Kes(Base):
    __tablename__ = 'kes'

    id = Column(Integer, primary_key=True, autoincrement=True)
    username = Column(String(255), nullable=False, unique=True)
    password = Column(String(255), nullable=False)



# 创建数据表
# Base.metadata.create_all(bind=engine)

# 创建一个用户对象
new_user = Kes()
new_user.username = "xiaokkk"
new_user.password = "123456"


# 创建数据库会话
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
db = Session()

# 添加用户对象到数据库
db.add(new_user)
db.commit()

# 查询所有用户并输出
users = db.query(Kes).all()
for user in users:
    print(f"User ID: {user.id}, Username: {user.username}, Password: {user.password}")
2024-06-26 16:43:34,783 INFO sqlalchemy.engine.Engine SELECT DATABASE()
2024-06-26 16:43:34,783 INFO sqlalchemy.engine.Engine [raw sql] {}
2024-06-26 16:43:34,785 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
2024-06-26 16:43:34,785 INFO sqlalchemy.engine.Engine [raw sql] {}
2024-06-26 16:43:34,786 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
2024-06-26 16:43:34,786 INFO sqlalchemy.engine.Engine [raw sql] {}
2024-06-26 16:43:34,788 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2024-06-26 16:43:34,791 INFO sqlalchemy.engine.Engine INSERT INTO kes (username, password) VALUES (%(username)s, %(password)s)
2024-06-26 16:43:34,791 INFO sqlalchemy.engine.Engine [generated in 0.00039s] {'username': 'xiaokkk', 'password': '123456'}
2024-06-26 16:43:34,792 INFO sqlalchemy.engine.Engine COMMIT
2024-06-26 16:43:34,817 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2024-06-26 16:43:34,820 INFO sqlalchemy.engine.Engine SELECT kes.id AS kes_id, kes.username AS kes_username, kes.password AS kes_password 
FROM kes
2024-06-26 16:43:34,820 INFO sqlalchemy.engine.Engine [generated in 0.00025s] {}
User ID: 1, Username: xiaokkk, Password: 123456

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值