【问题标题】:FastAPI + sqlite Inserting data to a databaseFastAPI + sqlite 将数据插入数据库
【发布时间】:2021-10-15 21:12:48
【问题描述】:

我是 FastAPI 的新手,正在尝试了解该框架。 我正在尝试将数据插入到我的数据库中,但我遗漏了一些东西。

这是我的模型:

from datetime import datetime
from pydantic import BaseModel

class Article(BaseModel):
    id: int
    title: str
    slug: str
    content: str
    author: str
    date: datetime

class InArticle(BaseModel):
    title: str
    slug: str
    content: str
    author: str

这就是逻辑

@app.post("/articles", response_model=InArticle)
async def create_article(article: InArticle):
    cursor = connexion.cursor()
    article_obj = (InArticle(
        title=article.title,
        slug=article.slug,
        content=article.content,
        author=article.author
    ))
    db_query = """INSERT INTO Article (title, slug, content, author) 
                    VALUES (?, ?, ?, ?)"""
    cursor.execute(db_query, article_obj)
    connexion.close()
    return article

我收到此错误:

cursor.execute(db_query, article_obj)
ValueError: parameters are of unsupported type

我错过了什么?

【问题讨论】:

标签: python-3.x database api sqlite fastapi


【解决方案1】:

SQLAlchemy 抱怨你给它一个article_obj - 它不知道该怎么做。如果您打算手动发出查询(您可能想查看SQLModel 或使用SQLAlchemy's ORM),您将不得不单独提供参数。

要使用您给出的语法,您应该手动给出值:

cursor.execute(db_query, (article.title, article.slug, article.content, article.author))

.. 或使用命名参数:

db_query = """INSERT INTO Article (title, slug, content, author) 
                VALUES (:title, :slug, :content, :author)"""

# .. which you can then expand automagically
cursor.execute(db_query, **article_obj.dict())
# **article_obj.dict() expands it to title=article_obj.title, ..etc

【讨论】:

  • 非常感谢您的时间、反应和来源。第一种方法是有效的,我现在有不同的方法来探索以实现它。再次感谢
  • 稍加了解后,我可以将它作为参数传递,就像它是一个对象一样; article_obj = { "title": article.title, "slug": article.slug, "content": article.content, "author": article.author } 或使用 cursors.execute 方法,但它需要 2 个参数。所以是 cursor.execute(db_query, (article.title, article.slug, article.content, article.author)) 再次感谢您的帮助。汤姆
猜你喜欢
  • 2018-11-24
  • 2017-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
相关资源
最近更新 更多