2014-10-14 3 views
2
class Country(db.Model): 
    __tablename__ = 'countries' 
    id = db.Column(db.Integer, primary_key=True) 
    code = db.Column(db.Integer) 
    name_en = db.Column(db.String(100)) 
    user_country = db.relationship('User', backref='country') 
    company_country = db.relationship('Company', backref='country') 

В этом примере я переопределяю имя таблицы. Итак, что должно быть backref? tablename или название класса? Или может быть что-нибудь еще?Определить параметр backref

Из документов:

backref простой способ также объявить новое свойство на ххххх класса

Таким образом, название backref только общее описание?

И если у меня есть две таблицы, использующие таблицу country, мне нужно создать две связи, как в моем примере? процедура является одним отношением по каждой ссылке в другой таблице?

ответ

0

Нравится? Это сделает user.country чем-то вроде модели

class User(db.Model): 
    __tablename__ = 'users' 
    id = db.Column(db.Integer, primary_key=True) 
    country = db.relationship("Country", backref="users") 

class Country(db.Model): 
    __tablename__ = 'countries' 
    id = db.Column(db.Integer, primary_key=True) 
    user_country_id = db.Column(db.Integer, db.ForeignKey('users.id')) 
    user_country = db.relationship("User") 
+0

Я думаю, что вы не внимательно прочитали вопрос. Благодарю. – anvd

1

Вы можете ссылаться на этот пример.

class Parent(Base): 
     __tablename__ = 'parent' 
     id = Column(Integer, primary_key=True) 
     children = relationship("Child", backref="parent") 

    class Child(Base): 
     __tablename__ = 'child' 
     id = Column(Integer, primary_key=True) 
     parent_id = Column(Integer, ForeignKey('parent.id')) 

Чтобы сохранить ребенка в Родитель

Получить родительский объект.

p = Parent.query.get(1) 

Хранить в дочернем объекте с помощью backref

c = Child(parent=p) 
db.session.add(c) 
db.session.commit() 

Чтобы получить доступ к parend через дочерний объект вы будете следовать этому. Сделать объект.

child = Child() 

Доступ через спину.

child.parent. 
0

Он смущает. Кроме того, документ sqlalchemy длинный и утомительный, трудно понять.

Итак, какой должна быть задняя часть? Имя таблицы или имя класса? Или может быть что-нибудь еще?

Все остальное может стать backref имя

Таким образом, название backref только общее описание?

Да, он добавляет атрибут в ваш класс (другими словами, таблицу) динамически. Поскольку SQLAlchemy использует метаклассы, код, создающий обратную ссылку на другой класс, не будет работать, пока вы не создали хотя бы один экземпляр класса Client. См. backref-class-attribute для получения дополнительной информации, например, для доступа к обратному файлу Subject.client.

И если у меня есть две таблицы с использованием таблицы стран, мне нужно создать две связи, как в моем примере? процедура является одним отношением по каждой ссылке в другой таблице?

Похоже, вы хотите иметь много разных отношений. Это могут помочь как association-table, так и flask-doc.

надеюсь, что это поможет :)

Смежные вопросы