Seite 2 von 2
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 20:15
von meego
Code: Alles auswählen
File "x.py", line 17, in my_function
return Roomtype.get(Roomtype.id == 1).roomtype_de
NameError: global name 'Roomtype' is not defined
Code: Alles auswählen
from bottle import Bottle, route, get, post, request, run, template
from bottle_peewee import PeeweePlugin
app = Bottle()
db = PeeweePlugin('sqlite:///x.db')
@route('/my_function')
def my_function():
return Roomtype.get(Roomtype.id == 1).roomtype_de
app.install(db)
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 20:26
von BlackJack
@meego: Natürlich bekommst Du diesen Fehler, das ist absolute Grundlage von Python das alle Namen irgendwo definiert sein müssen bevor man sie verwendet. Also braucht man mit Ausnahme der direkt in Python ”eingebauten” Namen entsprechenden Code der einen Namen bekannt macht. Wo ist denn das bei `Roomtype` in Deinem Code der Fall? Woher soll Python wissen was damit gemeint ist?
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 20:34
von meego
Hi Blackjack
Ich dachte halt das Plugin macht die DB-Tabellennamen irgendwo bekannt.
Die Doku ist leider sehr spärlich:
https://pypi.python.org/pypi/bottle-peewee
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 20:41
von BlackJack
@meego: Die Dokumentation ist deshalb spärlich weil das Plugin so gut wie nichts macht ausser dem Handling des Zyklus für einen einzelnen Request/Response, eben das man sich das nicht bei jedem mal selbst schreiben muss. Ansonsten ist das `database`-Attribut halt das Pewee-Datenbankobjekt. Das war's auch schon (fast). Alles andere steht in der Pewee-Dokumentation.
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 20:49
von noisefloor
Hallo,
meego hat geschrieben:Naja, es ist nicht Standard in Ubuntu. Man muss es explizit aufrufen.
Das ist ja mal ein denkbar schlapper Grund. Ob du `python` tipps oder `python3` spielt ja wohl mal keine Rolle. Und ab Ubuntu 15.10 wird wohl Python 3 das Default-Python unter Ubuntu

Aber egal, ist ein anderes Thema.
Gruß, noisefloor
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 21:29
von meego
Hi
Also ich habe jetzt so ziemlich alle Varianten durchspekuliert..
Code: Alles auswählen
app = Bottle()
db = PeeweePlugin('sqlite:///x.db')
global db
@route('/my_function')
def my_function():
return db.database.Roomtype.get(Roomtype.id == 1).roomtype_de
app.install(db)
return db.database.Roomtype.get(Roomtype.id == 1).roomtype_de
AttributeError: 'SqliteDatabase' object has no attribute 'Roomtype'
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 22:29
von BlackJack
@meego: Wo hast *Du* denn die Klasse `Roomtype` definiert? Alternativ: Wo in der Dokumentation steht das Du die nicht definieren musst, sondern die auf irgendeine magische Weise irgendwo (ja wo denn?) existiert? Du scheinst hier das Code-Raten auf die Spitze zu treiben und Dir einfach mal so Magie zu wünschen und zu hoffen irgendeine zusammegwürfelte Variante von Code den Du gerne mit einer solchen Bedeutung hättest, würde schon funktionieren.
Re: Peewee und Bottle
Verfasst: Freitag 24. Juli 2015, 23:14
von meego
Hi
In einer anderen .py-Datei mit der ich die DB erzeuge, ich dachte das Plugin kann die Tabellennamen auslesen:
Code: Alles auswählen
import os, sys
from bottle import Bottle
from bottle_peewee import PeeweePlugin
from peewee import Model, ForeignKeyField, CharField, TextField, IntegerField, BooleanField, DateTimeField, DateField, TimeField
import datetime
app = Bottle()
db = PeeweePlugin('sqlite:///x.db')
class BaseModel(Model):
class Meta:
database = db.proxy
class Roomtype(BaseModel):
roomtype_de = CharField(max_length=80)
roomtype_en = CharField(max_length=80)
hint_de = CharField(max_length=250)
hint_en = CharField(max_length=250)
app.install(db) # unklar: befähigt was?
db.database.create_tables([Roomtype])
roomtypes = [
{'roomtype_de': 'bla'},
{'roomtype_de': 'bla'},
]
with db.database.atomic():
Roomtype.insert_many(roomtypes).execute()
Ich muss also anders vorgehen?
Re: Peewee und Bottle
Verfasst: Sonntag 26. Juli 2015, 20:37
von Sirius3
@meego: wie sollte denn eine Klasse, die irgendwo definiert wird plötzlich im Datenbankobjekt verfügbar sein? Du solltest wirklich mal die Dokumentation lesen.
Re: Peewee und Bottle
Verfasst: Sonntag 26. Juli 2015, 21:27
von meego
@Sirius: Ich habe jetzt alles in eine Datei genommen. Wo aber das Objekt aus den Klassen erstellt wird, ist mir immer noch nicht ganz klar. Vielleicht mit
app.install(db) ?
Re: Peewee und Bottle
Verfasst: Montag 27. Juli 2015, 06:45
von noisefloor
Hallo,
meego hat geschrieben:Vielleicht mit app.install(db) ?
Nee, damit machst du das Plugin nur deiner Bottle-Applikation "bekannt".
Gruß, noisefloor
Re: Peewee und Bottle
Verfasst: Montag 27. Juli 2015, 09:48
von meego
Hallo
Okay. Und wo werden dann aus den Klassen jetzt Objekte erzeugt?
Re: Peewee und Bottle
Verfasst: Montag 27. Juli 2015, 10:14
von noisefloor
Hallo,
wenn die Doku dir das nicht verrät, den wirf' das Modul weg und nimm' ein anderes
Gruß, noisefloor