[英]SqlAlchemy automap not generating Base.classes.[table_name]
我有一个从csv导入的现有sqlite db 文件 。 我试图使用sqlalchemy自动映射数据库文件。 但这总是给我...
追溯(最近一次通话):文件“”,第1行,位于文件“ C:\\ Users \\ Administrator \\ AppData \\ Local \\ Programs \\ Python \\ Python36-32 \\ lib \\ site-packages \\ sqlalchemy \\ util_colle ctions.py”中getattr中的第212行,引发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
原谅我回答了一个古老的问题,但是发生这种情况的原因是由于反射功能的限制,并且由于SQLite数据库过于简化,因此它在SQLite数据库中的使用更加频繁。 为了使automap_base正常工作,您需要确保您的SQLite数据库表具有一个具有唯一值的主键(是的,这听起来很多余,但是显然在SQLite中它们具有不同的含义?)。
如果您将DB Browser用于SQLite( https://sqlitebrowser.org/-在Mac和Windows上均可使用),则可以单击“数据库结构”选项卡,单击表名,然后单击“修改表”子-tab应该在主选项卡正下方的辅助选项卡中可见(是的,UI有点奇怪)。
在“修改表”弹出窗口中,找到表的主键,并确保选中PK和U框(对于Primary Key和Unique)。 在此期间,您可以利用机会确保您的列具有合理的类型(例如,确保数字列使用正确的数字类型)。 完成后,单击“确定”。
正确定义数据库后, print(Base.classes.keys())
应该显示数据库中的所有表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.