2017-05-21 2 views
1

In regelmäßigen SQL ziehen Ich kann eine ganze Spalte über "Select * from table" ziehen, kann ich nicht finden, ein Äquivalent in sqlalchemy.Erhalten Sie sqlalchemy, um ganze Spalte

Ich versuche, alle Benutzernamen aus meiner Tabelle Benutzer zu ziehen. Alles, was ich bis jetzt gefunden habe, ist models.User.query.all() und dann führe ich eine for-Schleife aus, um die Spalten zu ziehen, die ich will, aber ich glaube, das ist eine schreckliche Übung, da es die ganze Tabelle zieht, wenn ich nur 1 will Säule.

models.py

class User(db.Model): 
    id = db.Column(db.Integer, primary_key=True) 
    username = db.Column(db.String(32), index=True, unique=True) 
    password_hash = db.Column(db.String(128)) 
    email = db.Column(db.String(120), index=True, unique=True) 
    posts = db.relationship('Post', backref='author', lazy='dynamic') 
    #mobilitys = db.relationship('Mobility', backref='username', lazy='dynamic') 
    about_me = db.Column(db.String(140)) 
    last_seen = db.Column(db.DateTime) 

    def __repr__(self): # pragma: no cover 
     return '<user> %r' % (self.username) 

-Terminal versucht, für Follow-up-Fragen with_entities

>>> from app import db, models 
>>> models.User.query.with_entities(User.username) 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
NameError: name 'User' is not defined 
>>> models.User.username 
<sqlalchemy.orm.attributes.InstrumentedAttribute object at 0x7fccb4f682f0> 

Terminal-Ansicht zu tun:

[email protected]:~$ cd Documents/45 
[email protected]:~/Documents/45$ source env/bin/activate 
(env) [email protected]:~/Documents/45$ flask/bin/python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from models import User 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named models 
>>> from .models import User 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Attempted relative import in non-package 

2. Terminal-Ansicht:

(env) [email protected]:~/Documents/45$ flask/bin/python 
Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
[GCC 5.4.0 20160609] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from app import db, models 
>>> from models import User 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named models 
>>> from .models import User 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: Attempted relative import in non-package 

Antwort

1

Sie können mit der Methode with_entities() versuchen, die Spalten einzuschränken, die Sie im Ergebnis zurückgeben möchten. zB:

result = User.query.with_entities(User.username) 

oder mit sqlalchmey Sitzung:

result = session.query(User.username) 
+0

Also versuchte ich, dass in meinem Terminal und behauptet Benutzer war nicht definiert. Um zu demonstrieren, dass es definiert ist, habe ich User.username danach ausgeführt. Ich habe die Ergebnisse am Ende der ursprünglichen Frage veröffentlicht. –

+0

Sie haben 'User' nicht importiert, deshalb ist Ihr zweiter' User' nicht definiert, Sie können auch '' Models' 'wie diese 'models.User.query.with_entities (models.User.username)', oder 'hinzufügen Von den Modellen importieren Sie den Benutzer, so dass Sie 'User' direkt benutzen können. –

+0

Das hat super funktioniert, danke. –

Verwandte Themen