Я пытаюсь работать на RESTful примере.Я использую Flask, зефир, sqlalchemy и Postgres DB. Проблема в том, что FK в одной таблице, похоже, обрабатывается как поле.
Я пробовал поискать в Google, но безуспешно.
Это то, что у меня есть
Model.py
class Customer(db.Model):
__tablename__ = 'customers'
__table_args__ = {"schema": "business"}
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Text, nullable=False)
status = db.Column(db.Integer, nullable=False)
# Define the JSON schemas
class CustomerSchema(ma.ModelSchema):
class Meta:
model = Customer
class Token(db.Model):
__tablename__ = 'tokens'
__table_args__ = {"schema": "business"}
id = db.Column(db.Integer, primary_key=True)
token = db.Column(db.String(60), nullable=False)
name = db.Column(db.String(30), nullable=False)
token_type = db.Column(db.Integer, nullable=False, default=0)
description = db.Column(db.String(60), nullable=True)
created = db.Column(db.TIMESTAMP,
server_default=db.func.timezone('UTC',
db.func.current_timestamp()),
nullable=True)
expires = db.Column(db.TIMESTAMP,
server_default=db.func.timezone('UTC',
db.func.current_timestamp()),
nullable=True)
# Add FK to Customer
customer_id = db.Column(db.Integer, db.ForeignKey('business.customers.id',
ondelete='CASCADE'),
nullable=False)
customer = db.relationship('Customer',
backref=db.backref('customers', lazy='dynamic'))
# defines the JSON schemas
class TokenSchema(ma.ModelSchema):
class Meta:
model = Token
И это мой код конечной точки:
# Get ALL Tokens
class TokenList(Resource):
def get(self):
tokens = Token.query.all()
tokens = tokens_schema.dump(tokens)
return {'status': 'success', 'data': tokens}, 200
Когда я звонюв этой конечной точке я получаю эту ошибку:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) column tokens.customer_id does not exist
Что верно!Это не существует в этой таблице, это FK
Из этого (сгенерированного) SQL:
SQL: 'SELECT business.tokens.id AS business_tokens_id, business.tokens.token AS business_tokens_token, business.tokens.name AS business_tokens_name, business.tokens.token_type AS business_tokens_token_type, business.tokens.description AS business_tokens_description, business.tokens.created AS business_tokens_created, business.tokens.expires AS business_tokens_expires, business.tokens.customer_id AS business_tokens_customer_id \nFROM business.tokens'
Я после всех строк в таблице токенов, поэтому я не пытаюсь присоединитьсяэто к клиентскому столу.Я не понимаю, почему он включен в оператор выбора?
Вся помощь приветствуется!