RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1571361
Accepted
Emil Aliyev
Emil Aliyev
Asked:2024-03-13 13:03:09 +0000 UTC2024-03-13 13:03:09 +0000 UTC 2024-03-13 13:03:09 +0000 UTC

Flask + SQLAlchemy + Sqlite 对象未添加到数据库

  • 772

我会尽量写得很简短,代码会很零碎,我会尽量不写太多。我只想说我在控制台中逐行检查了所有内容,我将在下面附加错误。我有一个有五个字段的类,第一和第五是明确的。

class Article(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(100), nullable=False)
    intro = db.Column(db.String(300), nullable=False)
    text = db.Column(db.Text, nullable=False)
    date = db.Column(db.DateTime, default=datetime.utcnow)


    def __repr__(self):
        return '<Article %r>' % (self.id)

对象填写表格:

<form action="/create-article" method="post">
<input type="text" name="title" id="title" class="form-control"></br>
<textarea name="intro" id="intro" class="form-control"></textarea></br>
<textarea name="text" id="text" class="form-control"></textarea></br>
<input type="submit" class="btn btn-success" value="Отправить">

然后使用 post 方法,我只需创建一个填充了字段的对象

def create_article():
    if request.method == 'POST':
        title = request.form['title']
        intro = request.form['intro']
        text = request.form['text']

        article = Article(title=title, intro=intro, text=text)
        with app.app_context():
            try:
                db.session.add(article)
                db.session.commit()
                return redirect('/')
            except:
                return 'Error'
    else:
        return render_template('create-article.html')

起初我很长一段时间无法创建数据库本身,据我了解,新版本的Flask有这样的问题。我阅读了文档,我必须以 with app.app_context(): 不同的方式编写它

这通常意味着您尝试使用当前应用程序所需的功能。要解决此问题,请设置应用程序上下文 with app.app_context()。请参阅文档以获取更多信息。

那么,向数据库添加文章时,这也是唯一的方法。

返回“错误”

我在控制台中逐行尝试了所有内容,该步骤db.session.commit() 出现错误

> sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: article
[SQL: INSERT INTO article (title, intro, text, date) VALUES (?, ?, ?, ?)]
[parameters: ('title', 'intro', 'text', '2024-03-13 04:25:38.283046')]
(Background on this error at: https://sqlalche.me/e/20/e3q8)

但该类的实例已经创建并且可以访问。我附上屏幕截图。日志

当然,我在弄清楚app_context之后创建了数据库

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'

在控制台中,我只是手动将同名行添加到三个字段中进行测试。

显然该文章对象不存在。我恳请你帮我解决这个问题。

sqlite
  • 2 2 个回答
  • 40 Views

2 个回答

  • Voted
  1. Oopss
    2024-03-13T15:41:00Z2024-03-13T15:41:00Z

    我猜是因为

    我很长一段时间无法创建数据库本身

    数据库已创建,但数据库中的表未创建。
    您可以在某些 sqlite 编辑器中添加表。
    您可以创建并执行一次性脚本:

    from sqlalchemy import create_engine,Table,MetaData, Column, String, Integer, Text, DateTime,select
    from sqlalchemy.inspection import inspect
    import datetime
    # Создаем движок
    engine=create_engine('sqlite:///mysqlite.db',echo=True)
    metadata=MetaData()
    
    # Описываем таблицу базы данных
    article=Table('article', metadata,
         Column('id',Integer, primary_key=True),
         Column('title',String(100), nullable=False),
         Column('intro',String(300), nullable=False),
         Column('text',Text, nullable=False),
         Column('date',DateTime, default=datetime.datetime.utcnow)
                  )
    
    # Это если несколько раз запускать программу, проверка если таблица есть, то удалить и создать
    inspector=inspect(engine)
    if article.name in inspector.get_table_names():
         article.drop(bind=engine)
         article.create(bind=engine)
    else:
         article.create(bind=engine)
    
    #Записать тестовые данные
    data=[{ 'title':'Здесь заголовок',
         'intro':'Коротко о главном',
         'text':'Основной текст'
           },
    { 'title':'Здесь другой заголовок',
         'intro':'Коротко о главном вторая запись',
         'text':'Основной текст полностью'
           }
          ]
    insdata=article.insert().values(data)
    with engine.begin() as con:
         con.execute(insdata)
    
    
    #Вывести тестовые данные
    with engine.begin() as con:
         res=con.execute(select(article))
         for el in res:
              print(el)
    

    (1, 'Здесь заголовок', 'Коротко о главном', 'Основной текст', datetime.datetime(2024, 3, 13, 7, 30, 46, 674496))
    (2, 'Здесь другой заголовок', 'Коротко о главном вторая запись', 'Основной текст полностью', datetime.datetime(2024, 3, 13, 7, 30, 46, 674496))
    

    为了防止日志显示,修复它engine=create_engine('sqlite:///mysqlite.db',echo=False)

    • 1
  2. Best Answer
    Emil Aliyev
    2024-03-14T05:06:58Z2024-03-14T05:06:58Z

    该问题是由于通过 .py 文件本身创建数据库造成的。为了避免这个问题,在终端中一一输入命令

    python
    from app import app
    from app import db
    with app.app_context():
        db.create_all()
    

    冒号之后,不要忘记四个空格或异端制表符。该文件必须在项目中创建,并且其大小不能为零(对于我来说)。此外,对于数据库的任何操作,您必须使用构造

    with app.app_context():
        #операция с бд (добавление, удаление и тд)
    
    • 0

相关问题

  • 烧瓶:靠近“”:语法错误

  • 加密每个 sqlite 数据库条目的缺点是什么?

  • 多插入

  • SQLite 审计触发器

  • Qt SqlLite 对非空表进行正常 SELECT 查询后的空列表?

  • 为什么数据库表中的数据计算不正确?

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5