在Flask SqlAlchemy中将主键和外键定义到同一个字段

时间:2014-12-28 14:21:53

标签: python mysql flask-sqlalchemy

我有以下定义

class Usuario(db.Model):
  __tablename__ = 'usuarios'
  id_usuario = db.Column(db.Integer, primary_key = True)
  id_centro = db.Column(db.Integer)
  creado_en = db.Column(db.DateTime)
  actualizado_en = db.Column(db.DateTime)
  gcm_id = db.Column(db.Text)
  notificaciones = db.relationship('RelNotificacionUsuario', backref='usuario', lazy='dynamic')

  def __init__(self, id_usuario, id_centro):
    self.id_usuario = id_usuario.title()
    self.id_centro = id_centro.title()
    self.gcm_id = gcm_id.title()


class Notificaciones(db.Model):
  __tablename__ = 'notificaciones'
  id_notificacion = db.Column(db.Integer, primary_key = True)
  descripcion = db.Column(db.Text)
  creado_en = db.Column(db.DateTime)
  actualizado_en = db.Column(db.DateTime)
  fecha = db.Column(db.DateTime)
  notificaciones = db.relationship('RelNotificacionUsuario', backref='notificacion', lazy='dynamic')

  def __init__(self, id_usuario, id_centro):
    self.id_usuario = id_usuario.title()
    self.id_centro = id_centro.title()
    self.gcm_id = gcm_id.title()


class RelNotificacionUsuario(db.Model):
  __tablename__ = 'rel_notificacion_usuario'
  id_usuario = db.Column(db.Integer, primary_key = True, db.ForeignKey('usuarios.id_usuario'))
  id_centro = db.Column(db.Integer, primary_key = True, db.ForeignKey('notificaciones.id_notificacion'))
  creado_en = db.Column(db.DateTime)
  actualizado_en = db.Column(db.DateTime)
  gcm_id = db.Column(db.Text)

以下几行失败SyntaxError: non-keyword arg after keyword arg

id_usuario = db.Column(db.Integer, primary_key = True, db.ForeignKey('usuarios.id_usuario'))
id_centro = db.Column(db.Integer, primary_key = True, db.ForeignKey('notificaciones.id_notificacion'))

1 个答案:

答案 0 :(得分:1)

根据文档http://docs.sqlalchemy.org/en/rel_0_9/core/metadata.html#sqlalchemy.schema.Column

这是好方法:

id_usuario = db.Column(db.Integer, db.ForeignKey('usuarios.id_usuario'), primary_key = True)
id_centro = db.Column(db.Integer, db.ForeignKey('notificaciones.id_notificacion'), primary_key = True)