¿Cómo puedo seleccionar todas las filas con sqlalchemy?

3 minutos de lectura

avatar de usuario de gummibear
osito de goma

Estoy tratando de obtener todas las filas de una tabla.

En el controlador tengo:

meta.Session.query(User).all()

El resultado es [, ]pero tengo 2 filas en esta tabla.

Yo uso este modelo para la mesa:

import hashlib
import sqlalchemy as sa
from sqlalchemy import orm

from allsun.model import meta

t_user =  sa.Table("users",meta.metadata,autoload=True)

class Duplicat(Exception):
    pass
class LoginExistsException(Exception):
    pass
class EmailExistsException(Exception):
    pass

Y a continuación, en el mismo archivo:

class User(object):
    def loginExists(self):
        try:
            meta.Session
                .query(User)
                .filter(User.login==self.login)
                .one()
        except orm.exc.NoResultFound:
            pass
        else:
            raise LoginExistsException()

    def emailExists(self):
        try:
            meta
                .Session
                .query(User)
                .filter(User.email==self.email)
                .one()
        except orm.exc.NoResultFound:
            pass
        else:
            raise EmailExistsException()


    def save(self):
        meta.Session.begin()
        meta.Session.save(self)
        try:
            meta.Session.commit()
        except sa.exc.IntegrityError:
            raise Duplicat()

orm.mapper(User, t_user)

  • No hay suficiente información para reproducir su problema. Qué es [, ]? No es una expresión de Python válida, sino que parece que está imprimiendo una lista de dos elementos [<User instance at ...>, <User instance at ...>] en HTML sin escapar correctamente.

    – Denis Otkidach

    14 de abril de 2010 a las 3:46

  • Para resolver eso puedes from flask import Markup y luego return Markup("%r") % User.query.all().

    – Dr. Jan-Philip Gehrcke

    23/09/2014 a las 15:39


Avatar de usuario de Nima Soroush
nima soroush

Puede importar fácilmente su modelo y ejecutar esto:

from models import User

# User is the name of table that has a column name
users = User.query.all()

for user in users:
    print user.name

  • ¿Cuál es la diferencia entre usar este código y usar ´session.query(SomeTable).all()´?

    – Programas

    24 de julio de 2019 a las 19:59

  • Creo que ‘User.query.all()’ usa core. Donde ´session.query(AlgunaTabla).all()´ es ORM

    – Shoopyman

    12 de enero de 2020 a las 3:39

  • NOTA: esta sintaxis, por lo que puedo ver en los documentos, solo está disponible usando Flask-SQLAlchemy, no SQLAlchemy directamente, que usa select(User) función

    – Ozzy El Gigante

    13 oct 2021 a las 19:37

  • Cuando sigues adelante y haces print(user) . Lo imprime en el formato <TableName primary_key>. Pensé que esto podría ayudar si te lo estás preguntando. Accede a una determinada entrada de columna por fila, puede hacer print(user.column_name). ¡Que tengas un buen día!

    – Muneeb Ahmad Khurram

    16 de enero de 2022 a las 19:53


Avatar de usuario de Sheece Gardazi
Gardazi de oveja

Uso el siguiente fragmento para ver todas las filas de una tabla. Use una consulta para encontrar todas las filas. Los objetos devueltos son las instancias de clase. Se pueden utilizar para ver/editar los valores según sea necesario:

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Sequence
from sqlalchemy import String, Integer, Float, Boolean, Column
from sqlalchemy.orm import sessionmaker

Base = declarative_base()

class MyTable(Base):
    __tablename__ = 'MyTable'
    id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
    some_col = Column(String(500))

    def __init__(self, some_col):
        self.some_col = some_col

engine = create_engine('sqlite:///sqllight.db', echo=True)
Session = sessionmaker(bind=engine)
session = Session()

for class_instance in session.query(MyTable).all():
    print(vars(class_instance))

session.close()

¿Ha sido útil esta solución?