Python sqlalchemy 插入数据失败 ?

这完全没任何提示就失败了是为什么?

from sqlalchemy.orm import sessionmaker
from sqlalchemy import create_engine, URL
from sys_user import SysUser
# 创建数据库连接
engine = create_engine(URL.create("mysql+pymysql", **{
    "host": "...",
    "port": 3306,
    "username": "root",
    "password": "...",
    "database": "...",
}), echo=True)

# 创建 sessionmaker 对象
Session = sessionmaker(bind=engine,autocommit=False)

# 创建 session
session = Session()

# 创建对象
obj = SysUser(account="cc")  # 根据你的模型类进行替换

# 将对象添加到 session
success = session.add(obj)

# 判断是否插入成功
if success:
    # 提交事务
    session.commit()
    print("Object inserted successfully.")
else:
    print("Failed to insert object.")
  • 模型
from sqlalchemy import String, DateTime, Integer
from sqlalchemy.orm import Mapped, mapped_column
import datetime

from sqlalchemy.orm import DeclarativeBase


class Base(DeclarativeBase):
    pass

class SysUser(Base):

    __tablename__ = 'table_aaa'

    id: Mapped[int] = mapped_column(primary_key=True)
    account: Mapped[str] = mapped_column(String(100))
  • 实际情况:压根连 add 方法都没触发:(删除了部分非必要代码)

image.png

image.png

image.png

image.png

  • 调试情况:

image.png

问题是为什么一定要赋值之后才能生效呢?方法不是已经返回了对象么?

阅读 3.8k
2 个回答

解决方案找打了,令人窒息:必须要用 with

with self.database() as db:
    db.add(SysUser(mobile="11"))
    db.commit()

在你的代码中,插入数据失败的原因可能是因为你在创建对象时没有设置id属性的值。由于id在模型类中被定义为主键,并且没有设置自动增长(autoincrement)的选项,因此在插入数据时需要显式地给id赋值。

修改你的代码,将创建对象的部分改为:

# 创建对象
obj = SysUser(id=1, account="cc")  # 根据你的需求设置id的值

# 将对象添加到 session
session.add(obj)

请根据你的需求设置id的值,确保它在数据库中是唯一的。然后再次运行代码,插入数据应该会成功。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏