【问题标题】:SqlAlchemy automap not generating Base.classes.[table_name]SqlAlchemy 自动映射不生成 Base.classes.[table_name]
【发布时间】:2019-10-17 01:45:21
【问题描述】:

我有一个从 csv 导入的现有 sqlite db file。我尝试使用 sqlalchemy 自动映射 db 文件。但它总是给我...

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 文件“C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sqlalchemy\util_colle ctions.py",第 212 行,在 getattr 中 提高属性错误(键) AttributeError: 目的地服务

感谢任何帮助。

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

【问题讨论】:

  • 这是因为没有设置主键。
  • 我也有同样的问题。你解决了吗?

标签: python sqlite sqlalchemy


【解决方案1】:

请原谅我回答了一个老问题,但发生这种情况的原因是由于反射能力的限制,而且它更经常使用 SQLite 数据库,因为它们经常被过度简化。要使automap_base 工作,您需要确保您的 SQLite 数据库表有一个具有唯一值的主键(是的,这听起来很多余,但显然它们在 SQLite 中具有不同的含义?)。

如果您使用 SQLite 数据库浏览器(https://sqlitebrowser.org/ -- 适用于 Mac 和 Windows),您可以单击“数据库结构”选项卡,单击表名,然后单击“修改表”子选项卡应该在主选项卡下方的辅助选项卡中可见(UI 有点奇怪)。

进入“修改表”弹出窗口后,找到表的主键并确保选中 PKU 框(用于主键和独特的)。当您在那里时,您可以借此机会确保您的列具有合理的类型(例如,确保数字列使用正确的数字类型)。完成后点击确定。

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

【讨论】:

    猜你喜欢
    • 2013-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-19
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    • 2021-10-11
    相关资源
    最近更新 更多