Flask学习(三):SQLAlchemy无法创建数据库

在学习Flask使用SQLAlchemy时遇到无法创建数据库的问题。错误信息显示找不到表,实际上数据库文件未在预期路径下生成。原因是Windows与Linux路径差异导致的绝对路径错误。解决方案包括使用相对路径或确保文件夹可写权限。在PyCharm中运行代码后,需通过shell手动执行`db.create_all()`来创建表结构,否则模型不会生成数据库表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

书中的代码如下,设置数据库配置

basedir = os.path.abspath(os.path.dirname(__file__))
app.config['SQLALCHEMY_DATABSE_URI'] = 'sqlite:///' + os.path.join(basedir, 'data.db')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True

然后新建模型,然后运行代码发现根本无法运行,运行之后就会提示错误!
这里写图片描述
从traceback看不出来什么错误,错误信息里面显示的是

sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: users [SQL: 'SELECT users.id AS users_id, users.username AS users_username, users.role_id AS users_role_id \nFROM users \nWHERE users.username = ?\n LIMIT ? OFFSET ?'] [parameters: ('1231', 1, 0)]

找不到这个表,理论上执行之后会在我当前目录下面可以创建一个data.db的文件,然后并没有创建。
于是我输出了SQLALCHEMY_DATABSE_URI的绝对路径:

sqlite:///D:\projec\www\data.db

显然这个路径是不对的,原作者写这个代码的时候可能是在Linux系统上运行的,但是我现在测试是在Windows上的,所以拼接出来的路径是一个错误的路径。
官方文档上写出来了[http://docs.sqlalchemy.org/en/latest/core/engines.html]
这里写图片描述
建议路径使用相对路径,使用绝对路径的话要自己写出来,因为Windows中的斜杠和Linux的不一样,拼接出来的路径会不对。

app.config['SQLALCHEMY_DATABSE_URI'] = 'sqlite:///data.db'

直接放在当前目录下,或者使用其他相对路径。
改完之后就可以了,但是过段时间又不行了。。。。文件目录下面有不能生成文件了。。。真的蛋疼,生成文件也没有错误提示。
想着检查下文件夹,发现我的整个工程文件夹都是只读的,莫名其妙,把权限给上之后就又可以了。

希望这次是真的可以了,然后在shell下面执行数据文件正常生成了。

记住:如果直接在pycharm里面运行代码之后,使用浏览器打开之后输入提交之后还是会有一开始的错误。
这个时候使用pycharm打开生成data.db文件会发现其实里面是空的,在model里面创建的两个对象其实并没有生成表结构。实际应该是shell中进入python然后运行from hello import db(备注:我是写在hello.py里面,然后实例是db = SQLAlchemy(app)),引用db之后,执行db.create_all(),这时候打开数据文件就会发现里面有我们创建的表结构了,然后再去界面操作就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值