2016-08-30 2 views
0

Ich versuche, SQL-Einfügeanweisungen mithilfe von sqlalchemy wie folgt zu generieren.Mit einem Sonderzeichen wie einem Punkt in einem Python-Schlüssel

def get_sql(self): 
    """Returns SQL as String""" 
    baz_ins = baz.insert().values(
     Id=self._id, 
     Foo.Bar=self.foo_dot_bar, 
    ) 
    return str(baz_ins.compile(dialect=mysql.dialect(), 
          compile_kwargs={"literal_binds": True})) 

Dies gibt keyword cannot be expression zurück. Der Zeitraum wie \. zu entkommen, funktioniert auch nicht.

Eine Lösung, die ich gefunden habe, ist FooDOTBar instead of Foo.Bar und dann ersetzen alle "DOT" mit "." In den generierten SQL-Dateien korrumpiert dies jedoch einige andere Daten und ist nicht optimal. Gibt es bessere Vorschläge, um von Grund auf damit umzugehen?

+0

Warum Sie eine Periode in einem Parameternamen setzen wollen? Ist es so im Tabellenschema definiert? – FamousJameous

+0

Ja, es ist traurig. Ich habe keine Kontrolle darüber. – user3683080

Antwort

0

In Ihrer Anfrage, valuesassigned with dictionary sein kann. So können Sie so etwas wie:

baz_ins = baz.insert().values({"Id": self._id, "Foo.Bar": self.foo_dot_bar}) 

Schauen Sie sich die insert Dokumentation für mehr Optionen

0

Es gibt eine alternative Form von .values wo man in einem dict passieren statt:

baz.insert().values({ 
    "Id": self._id, 
    "Foo.Bar": self.foo_dot_bar, 
}) 
Verwandte Themen