2017-11-28 5 views
0

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?

+0

Normale Python-Klassensyntax ist die Verwendung von Groß-/Kleinschreibung, d. H. StylesIndex (nach PEP 8), ist das eine Option? –

+0

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. –

+0

Sehen Sie, welche Tabellennamen es im Vergleich zur Syntax erzeugt. –

Antwort

1

Für den Datensatz, mit PEP 8 spezifische Namen wie MyClassName, wird ein solches Problem nicht haben.

Verwandte Themen