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 即可在与您的目录相同的目录中创建文件主程序。
我有一个 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 即可在与您的目录相同的目录中创建文件主程序。