繁体   English   中英

SqlAlchemy自动映射不会生成Base.classes。[table_name]

[英]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有点奇怪)。

在“修改表”弹出窗口中,找到表的主键,并确保选中PKU框(对于Primary Key和Unique)。 在此期间,您可以利用机会确保您的列具有合理的类型(例如,确保数字列使用正确的数字类型)。 完成后,单击“确定”。

正确定义数据库后, print(Base.classes.keys())应该显示数据库中的所有表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM