当前位置: 首页 > 知识库问答 >
问题:

python - Python sqlalchemy 插入数据失败 ?

党浩阔
2023-08-23

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

from sqlalchemy.orm import sessionmakerfrom sqlalchemy import create_engine, URLfrom 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)# 创建 sessionsession = Session()# 创建对象obj = SysUser(account="cc")  # 根据你的模型类进行替换# 将对象添加到 sessionsuccess = session.add(obj)# 判断是否插入成功if success:    # 提交事务    session.commit()    print("Object inserted successfully.")else:    print("Failed to insert object.")
  • 模型
from sqlalchemy import String, DateTime, Integerfrom sqlalchemy.orm import Mapped, mapped_columnimport datetimefrom sqlalchemy.orm import DeclarativeBaseclass Base(DeclarativeBase):    passclass 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

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

共有2个答案

方宜
2023-08-23

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

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

# 创建对象obj = SysUser(id=1, account="cc")  # 根据你的需求设置id的值# 将对象添加到 sessionsession.add(obj)

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

潘银龙
2023-08-23

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

with self.database() as db:    db.add(SysUser(mobile="11"))    db.commit()
 类似资料:
  • 问题内容: 我曾经在python中向Elasticsearch插入数据,但无法插入数据。我的代码: 当我使用,但无法插入任何数据时,该如何处理呢?错误是: 问题答案: 使用method,您可以传递一个字典列表或一个生成器,生成一个字典。在这里解释。一个在python用于未在RAM中加载变量,但如果你要通过你的前一个清单- 在字典中的列表,它没有更多的意义,因为建立一个列表,你应该在内存中加载所有里

  • 概述 在MongoDB中,你可以使用insert()方法插入一个文档到MongoDB集合中,如果此集合不存在,MongoDB会自动为你创建。 插入文档 先用mongo命令行连接到一个MongoDB实例,转到test数据库。 use test 插入一个文档到restaurants集中,如果restaurants集合不存在,这个操作会先创建一个restaurants集合。 db.restaurants

  • 插入数据使用Insert方法,Insert方法的参数可以是一个或多个Struct的指针,一个或多个Struct的Slice的指针。 如果传入的是Slice并且当数据库支持批量插入时,Insert会使用批量插入的方式进行插入。 插入一条数据,此时可以用Insert或者InsertOne user := new(User) user.Name = "myname" affected, err :=

  • 你好,我写了一个php代码,从android接收文件,保存文件,并将url插入数据库。它保存的pdf完美,但不插入任何东西在数据库和给我的错误失败。我有什么办法可以修好它,怎么修好它?? 这是我的php代码

  • 问题内容: 我有一个字典,想要将所有值添加到sqlite数据库中。词典中的所有键都存在于数据库中,并且所有键的类型均为字符串。但是,在将值输入数据库时​​遇到了麻烦。每当下面的代码遇到字符串中带有“”的字符串时,它们都是丑陋的,不安全的,并且会出错,但是可以正常工作。 我如何才能优雅地解决此问题,使其安全并接受字符串中带有“”的输入?我遇到了几种其他方法。例如: 但是会引发类型错误。 到目前为止,

  • 问题内容: 我一直在看这段代码已有一段时间了,但我看不出问题出在哪里。我已经阅读了整个StackOverflow,但仍然看不到我的错误在哪里。 错误在第13行中,即thats 。我尝试通过http://www.w3schools.com/php/php_mysql_insert.asp帮助自己,但对我没有太大帮助。 问题答案: 警告: 切勿将 w3schools 用于学习目的。他们的教程中有很多错