Как анализировать идентификатор в приложении flask с помощью SQLAlchemy?

#python #sqlalchemy

#python #sqlalchemy

Вопрос:

Я хочу получить элемент в своей базе данных, используя его идентификатор, но формат моего идентификатора, когда я его получу, будет <id 1>, но мне нужно только число

Я думаю, что проблема связана с моей __repr__ функцией в моей модели :

 class Table(db.Model):
__tablename__ = "tables"

id = db.Column(db.Integer, primary_key = True, autoincrement = True)
family = db.Column(db.String(), nullable = False)
tablename = db.Column(db.String(), unique = True, nullable = False)

def __init__(self, family, tablename):
    self.family = family
    self.tablename = tablename

def __repr__(self):
    return '<id {}>'.format(self.id)

def serialize(self):
    return {
        'id': self.id,
        'family': self.family,
        'tablename': self.tablename
    }
 

и я получаю такой идентификатор :

 tablesArray = tables.Table.query.all()
for table in tablesArray:
        print(tables.Table.query.get(table))
 

Должен ли я анализировать результат самостоятельно или у него есть функция?

Ответ №1:

Вы можете переформатировать эту __repr__ функцию, чтобы получить целочисленное значение столбца ID.

Может быть, лучше создать __str__ функцию рядом с ней, делая именно это, и вы вызываете этот метод с str(object) помощью .

Тогда ваш класс таблицы DB выглядит следующим образом:

 class Table(db.Model):
__tablename__ = "tables"

id = db.Column(db.Integer, primary_key = True, autoincrement = True)
family = db.Column(db.String(), nullable = False)
tablename = db.Column(db.String(), unique = True, nullable = False)

def __init__(self, family, tablename):
    self.family = family
    self.tablename = tablename

def __repr__(self):
    return '<id {}>'.format(self.id)

def __str__(self):
    return self.id
 

И ваш вызывающий код выглядит так:
(Как отдельная настройка, упрощенная, поскольку запрос можно выполнять напрямую):

 tablesArray = tables.Table.query.all()
for table in tablesArray:
    print(str(tablesArray))