In meinem Flask/SQLAlchemy-Projekt habe ich eine Indextabelle namens Styles_Index, die ein entsprechendes Tabellenobjekt enthält, das ich abfrage. Das Schema in sqlite3 sieht aus wieSQLAlchemy-Tabellenname mit zwei Unterstrichen
CREATE TABLE Styles_Index
(
beer_id integer not null,
style_id integer not null,
primary key (beer_id, style_id)
);
und das Objekt in Python sieht aus wie
class Styles_Index(db.Model):
beer_id = db.Column(db.Integer, db.ForeignKey('beers.id'),
primary_key = True)
style_id = db.Column(db.Integer, db.ForeignKey('styles.id'),
primary_key = True)
Wenn ich versuche, den Tisch auf einem anderen zu verbinden, die einen gemeinsamen Schlüssel über die SQLAlchemy BaseQuery.join teilt() , erstellt es eine Abfrage:
SELECT styles__index.id AS styles__index_id,
styles__index.beer_id AS styles__index_beer_id,
styles__index.style_id AS styles__index_style_id
FROM styles__index JOIN styles ON styles__index.style_id = styles.id
LIMIT ? OFFSET ?
wo Styles_Index zwei Unterstriche anstelle von eins hat. Ist dies eine absichtliche Designwahl aufgrund des Platzhalters _ in SQL? Gibt es eine bessere Möglichkeit, diese Abfrage zu schreiben, ohne auf das Schreiben von Raw SQL zurückgreifen zu müssen?
Normale Python-Klassensyntax ist die Verwendung von Groß-/Kleinschreibung, d. H. StylesIndex (nach PEP 8), ist das eine Option? –
Es ist sicherlich eine Option, ich werde es versuchen und sehen, was passiert. Ich möchte meine Tabellennamen lieber nicht ändern, wenn ich es vermeiden kann. –
Sehen Sie, welche Tabellennamen es im Vergleich zur Syntax erzeugt. –