|
您的两个问题需要分开解决:迁移未生效和SQL查询执行错误。以下是详细解决方案:
---
### 问题1:迁移成功但数据库无新表
**原因分析:**
1. 未正确关联数据库文件(常见于SQLite)
2. 迁移脚本未实际执行变更
3. 模型定义有误导致迁移脚本无效
**解决步骤:**
1. **确认数据库文件路径**
在应用初始化代码中检查SQLite路径:
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db' # 默认在项目根目录
-
复制代码
使用绝对路径更可靠:
- import os
- basedir = os.path.abspath(os.path.dirname(__file__))
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'app.db')
-
复制代码
2. **手动验证迁移脚本**
打开 migrations/versions 目录下最新生成的 .py 文件
检查是否包含类似语句:
- def upgrade():
- op.create_table('email_captcha',
- sa.Column('id', sa.Integer(), nullable=False),
- ...
- )
-
复制代码
3. **强制重新迁移(危险操作!先备份数据)**
- # 删除所有迁移版本
- rm -rf migrations
-
- # 重新初始化
- flask db init
- flask db migrate -m "initial migration"
- flask db upgrade
-
复制代码
---
### 问题2:PyCharm中SQL查询报错
**错误原因:**
您直接在PowerShell执行了SQL命令,这不是数据库命令行工具!
**正确检查数据库的方法:**
#### 方法1:使用SQLite命令行
1. 打开PyCharm的Terminal
2. 进入项目目录
3. 执行:
- sqlite3 app.db # 进入SQLite命令行
- .tables # 查看所有表
- SELECT * FROM email_captcha; # 执行查询
- .exit # 退出
-
复制代码
#### 方法2:使用Python验证
创建测试文件 check_db.py:
- from app import db, create_app
- from models import EmailCaptchaModel
- app = create_app()
- with app.app_context():
- # 检查表是否存在
- print(db.engine.table_names())
-
- # 尝试查询数据
- records = EmailCaptchaModel.query.all()
- print(records)
复制代码
---
### 关键排查点:
1. 确保每次修改模型后都执行:
- flask db migrate -m "描述"
- flask db upgrade # 这步才是真正修改数据库!
-
复制代码
2. 检查数据库实际位置:
在PyCharm中右键点击 app.db → Open in Explorer 确认文件位置
3. 验证表名大小写:
SQLite默认区分大小写!确认模型中的 __tablename__ 和查询语句完全一致
---
请按以上步骤操作后,在Terminal中执行 sqlite3 app.db 进入数据库命令行再尝试查询。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|