Skip to content

Instantly share code, notes, and snippets.

@cra
Last active August 29, 2015 14:04
Show Gist options
  • Select an option

  • Save cra/535f0567a953ba183368 to your computer and use it in GitHub Desktop.

Select an option

Save cra/535f0567a953ba183368 to your computer and use it in GitHub Desktop.
Multiple foreignkeys for dummies
from app import db
class Copter(db.Model):
__tablename__ = "Copter"
id = db.Column(db.Integer, primary_key=True)
comment = db.Column(db.Unicode(100))
current_stay = db.Column(db.PickleType)
class User(db.Model):
__tablename__ = "User"
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(100))
surname = db.Column(db.Unicode(100))
uid = db.Column(db.Integer)
phone = db.Column(db.String(15))
class Path(db.Model):
__tablename__ = "Path"
id = db.Column(db.Integer, primary_key=True)
init_cords = db.Column(db.PickleType)
final_cords = db.Column(db.PickleType)
sender_id = db.Column(db.Integer, db.ForeignKey('User.id'))
sender = db.relationship("User", foreign_keys=[sender_id])
recipient_id = db.Column(db.Integer, db.ForeignKey('User.id'))
recipient = db.relationship("User", foreign_keys=[recipient_id])
copter_id = db.Column(db.Integer, db.ForeignKey('Copter.id'))
copter = db.relationship("Copter", foreign_keys=[copter_id])
active_state = db.Column(db.Integer)
date_finished = db.Column(db.DateTime)
(v)[cra@momo]::[16:37:13 Jul29] /tmp/lsh-guys
$ python manage.py shell
>>> from app import db
>>> db.drop_all()
>>> db.create_all()
>>> from app.models import User, Path, Copter
>>> c = Copter()
>>> c.comment = "YOBA"
>>> c.current_stay = 1
>>> db.session.add(c)
>>> db.session.commit()
/tmp/lsh-guys/v/lib/python2.7/site-packages/sqlalchemy/engine/default.py:459: SAWarning: Unicode type received non-unicode bind param value.
param.append(processors[key](compiled_params[key]))
>>> c.id
1
>>> sender = User()
>>> sender.surname = u"Shevl"
>>> sender.name = u"Dan"
>>> sender.uid = u"752107"
>>> sender.phone = u"02"
>>> sender.id
>>> print sender.id
None
>>> db.session.add(sender)
>>> db.session.commit()
>>> print sender.id
1
>>> recipient = User()
>>> recipient.name = u"Vasya"
>>> recipient.surname = u"Pupk"
>>> recipient.uid = u"Super-Uid"
>>> recipient.phone = u"007"
>>> print recipient.id
None
>>> db.session.add(recipient)
>>> db.session.commit()
>>> print recipient.id
2
>>> p = Path()
>>> p.init_coords = 12
>>> p.final_coords = 14
>>> p.sender = sender
>>> p.recipient = recipient
>>> p.copter = copter
Traceback (most recent call last):
File "<console>", line 1, in <module>
NameError: name 'copter' is not defined
>>> p.copter = c
>>> p.active_state = 42
>>> from datetime import datetime
>>> p.date_finished = datetime.now()
>>> db.session.add(p)
>>> db.session.commit()
>>> p.sender
<app.models.User object at 0x7f856f782c10>
>>> p.recipient
<app.models.User object at 0x7f856f782b90>
>>> p.recipient.name
u'Vasya'
>>> p.sender.name
u'Dan'
>>> p.copter.comment
u'YOBA'
>>>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment