簡體   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