Web 应用程序在 python 代码的第一个 运行 上创建数据库

web app make db on first run of python code

我有一个 aiohttp 应用程序,当 运行 第一次尝试创建一个 sqlite 数据库时,如果它不存在于 try_make_db() 函数中。我也不认为异常错误是执行此操作的好方法...

有人可以告诉我如何让它变得更好吗?

当 运行 文件时,我得到一个回溯:

Traceback (most recent call last):
  File "app.py", line 280, in <module>
    try_make_db()
  File "app.py", line 250, in try_make_db
    with sqlite3.connect(my_path) as conn:
sqlite3.OperationalError: unable to open database file

我认为这与 aiohttp 或 sqlite 没有任何关系,但更多的是 PATH 问题。

这不是全部代码,只是底部附近的代码,这里是 gist of the entire script:

def try_make_db() -> None:
    my_path = './form_data.db'
    with sqlite3.connect(my_path) as conn:
        cur = conn.cursor()
        print("Trying to connect to the db!")
        try:
            cur.execute("SELECT 1 FROM posts LIMIT 1;")
            cur.close()
            print("Good enough DB should be Ok")
        except Exception as e:
            print("Table 'posts' does not exist")
            cur.execute(
                """CREATE TABLE posts (
                Date TEXT PRIMARY KEY,
                starttime TEXT,
                endtime TEXT,
                Weekends NUMBER,
                Weekdays NUMBER,
                setpoint NUMBER)
            """
            )
            print("DB TABLE CREATED")
            conn.commit()

async def init_db(app: web.Application) -> AsyncIterator[None]:
    sqlite_db = 'form_data.db'
    db = await aiosqlite.connect(sqlite_db)
    db.row_factory = aiosqlite.Row
    app["DB"] = db
    yield
    await db.close()

try_make_db()


web.run_app(init_app()  , host='0.0.0.0', port=8080)

任何提示都非常感谢这里没有很多智慧。谁能告诉我如何修改 try_to_make_db 函数可能是这样的:

import os.path
if os.path.exists(PATH_TO_DB): # replace the path here
  print("Path exists")

检查 form_data.db 上的写入权限,您也不需要使用 ./ 明确说明您当前的工作目录,只需使用名称 form_data.db 即可在与您的目录相同的目录中创建文件主程序。