我有一个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问题。
这不是整个代码,只是在接近底部,这是整个脚本的要点:
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就会在与主程序相同的目录下创建文件。