Я не могу сохранить в SQLAlchemy, когда включен посторонний ключ - PullRequest
0 голосов
/ 10 мая 2018

Я могу создавать свои таблицы с помощью SQL Alchemy. Вот мой полный код:

from sqlalchemy import create_engine, Column, Integer, ForeignKey, 
String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

Base = declarative_base()


class User(Base):
    __tablename__ = 'person'

    id = Column(Integer, primary_key=True)
    username = Column(String, unique=True)

class Cars(Base):
    __tablename__ = "car"

    id = Column(Integer, primary_key=True)
    brand = Column(String)
    year = Column(Integer)
    plate = Column(String, unique=True)
    owner_id = Column(Integer, ForeignKey('person.id'))


engine = create_engine('postgresql://postgres:pass@localhost:5432/sqlalchemy')
#Base.metadata.create_all(bind=engine)

Session = sessionmaker(bind=engine)
session = Session()


user = User()
user.username = "Jack"

car = Cars()
car.brand = "Bmw"
car.plate = "NK 948"
car.year = 2016
car.owner_id = user

session.add(user)
session.add(car)
session.commit()
session.close()

Но когда я пытаюсь сохранить его в базе данных, я получаю следующую ошибку.

Traceback (most recent call last):
.
.
.
.
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'User' [SQL: 'INSERT INTO car (brand, year, plate, owner_id) VALUES (%(brand)s, %(year)s, %(plate)s, %(owner_id)s) RETURNING car.id'] [parameters: {'brand': 'Bmw', 'year': 2016, 'plate': 'NK 948', 'owner_id': <__main__.User object at 0x10d27d358>}] (Background on this error at: http://sqlalche.me/e/f405)

Что я делаю не так? Кажется, что я могу сохранить сырье для таблицы пользователя. Но для таблиц Cars, я думаю, что-то не так с ForeignKey. Но я не поняла.

Спасибо.

...