【问题标题】:How to retrieve data from sqlite3 database filled up using Python?如何从使用 Python 填充的 sqlite3 数据库中检索数据?
【发布时间】:2023-03-08 21:21:01
【问题描述】:

我正在使用 peewee 和烧瓶来使用用户输入和其他各种统计数据填充我的数据库。如何检索 sqlite3 数据库中的数据? 这是骨架:

from peewee import *
database = SqliteDatabase('app4.db', autocommit=True)
class BaseModel(Model):
 class Meta:
  database = database    

class Model1(BaseModel):

class Model2(BaseModel):

class Model3(BaseModel):

app = Flask(__name__)

@app.before_request
def func1():
 database.connect()

@app.after_request
def func2(response):
 database.close()
 return response 

@app.route('/', method= ['GET'])
def some_func():
 #update pluto and create instances of Model2 and Model3 here

if __name__ == "__main__":
 database.connect()
 database.create_tables([Model1, Model2, Model3], True)
 pluto, created = Model1.get_or_create(key = 2, key2 = 0)

我的应用程序正在运行并显示 Model1 和 Model2 的更新实例,这意味着它已创建模型并不断更新数据库。 但我不知道如何离线检索这些数据。

当我通过 sqlite3 app4.db 进入我的 sqllite 数据库并输入 .tables 时,它会显示所有表,即 Model1、Model2、Model3,但输入查询:select * from model1; 什么也没有。我也尝试在 Ipython shell 中检索数据,并如上所述连接到数据库并查询list(Model1.select()),但它给出了一个空列表。

【问题讨论】:

    标签: python database sqlite peewee


    【解决方案1】:

    您的数据库文件名似乎被设置为app.py:

    database = SqliteDatabase('app.py', autocommit=True)
    

    如果你想使用它,它可能应该是app4.db:

    database = SqliteDatabase('app4.db', autocommit=True)
    

    【讨论】:

    • S抱歉造成混淆。它实际上设置为 app4.db
    • 您确定您连接到正确的app4.db 文件吗?它可能与app.py 文件有关。
    • 其实,我确实很确定。我刚刚又检查了一遍。我认为它可能不会保存数据库的状态。您能否建议一些方法来确保在每次交易后保存数据库?我认为 autocommit =True 具有相同的功能。
    【解决方案2】:

    您使用的命令看起来像是在命令行中执行的正确命令。在我看来,两件事中的一件正在发生:

    1. 您实际上并未将数据放入数据库中
    2. 您查看的不是您正在填充的同一数据库。

    尝试重命名 app4.db 文件,然后重新运行您的应用程序,看看它是否会创建一个新应用程序。这样您就可以确保您在正确的平台上使用 sqlite3。如果您使用列出的命令仍未看到任何数据,我会假设您的应用实际上并未将数据放入表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2020-06-04
      • 2013-10-17
      • 2021-10-20
      • 2014-02-26
      • 2015-04-05
      • 1970-01-01
      相关资源
      最近更新 更多