fat*_*n13 4 python sqlite sqlalchemy
我有一个从 csv 导入的现有 sqlite 数据库文件。我尝试使用 sqlalchemy 自动映射 db 文件。但它总是给我...
回溯(最近一次调用最后):文件“”,第 1 行,文件“C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sqlalchemy\util_collections.py” ,第 212 行,在getattr中 引发 AttributeError(key) AttributeError:destinationservices
任何帮助表示赞赏。
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
Base = automap_base()
# engine, suppose it has two tables 'user' and 'address' set up
engine = create_engine("sqlite:///destServ.db")
# reflect the tables
Base.prepare(engine, reflect=True)
# mapped classes are now created with names by default
# matching that of the table name.
Service = Base.classes.destinationServices
Run Code Online (Sandbox Code Playgroud)
请原谅我回答一个老问题,但发生这种情况的原因是反射能力的限制,并且它在 SQLite 数据库中更常见,因为它们通常过于简化。为了automap_base工作,您需要确保您的 SQLite 数据库表有一个具有唯一值的主键(是的,这听起来很多余,但显然它们在 SQLite 中具有不同的含义?)。
如果您使用的是 SQLite 数据库浏览器(https://sqlitebrowser.org/——适用于 Mac 和 Windows),您可以单击“数据库结构”选项卡,单击表名称,然后单击“修改表”子菜单-tab 应该在主选项卡正下方的辅助选项卡中可见(UI 有点奇怪)。
进入“修改表”弹出窗口后,找到表的主键,并确保选中PK和U框(用于主键和唯一)。当您在那里时,您可以借此机会确保您的列具有合理的类型(例如,确保数字列使用正确的数字类型)。完成后单击“确定”。
正确定义数据库后,print(Base.classes.keys())应该会显示数据库中的所有表。
| 归档时间: |
|
| 查看次数: |
3396 次 |
| 最近记录: |