Simon, Thanks man! This works perfectly, can't believe I didn't see that.
This was actually a really frustrating experience, you guys have been extremely helpful. Thank you all so much! Best, -Randall On Thu, Mar 7, 2013 at 5:15 PM, Simon King <si...@simonking.org.uk> wrote: > According to the pastie log, your table is called "exchanges", not > "exchange", so the target columns should be called exchanges.exchange and > exchanges.area_code_pk. > > Simon > > On 8 Mar 2013, at 00:27, Randall Degges <rdeg...@gmail.com> wrote: > > > Hi Simon, > > > > Ok cool. So, I updated that, but now I'm getting the following error: > > > > sqlalchemy.exc.NoReferencedTableError: Foreign key associated with > column 'phonenumbers.exchange_exchange' could not find table 'exchange' > with which to generate a foreign key to target column 'exchange' > > > > It looks like SQLa is trying to create the tables out of order (I'm > guessing?). Is there a way to force this to execute in a specific order? > > > > -Randall > > > > > > On Thu, Mar 7, 2013 at 4:06 PM, Simon King <si...@simonking.org.uk> > wrote: > > You have to put your ForeignKeyConstraint in the __table_args__ for the > PhoneNumber class - see > http://docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html#table-configurationfor > details. Something like: > > > > class PhoneNumber(db.Model): > > __tablename__ = 'phonenumbers' > > > > phone_number = db.Column(db.Numeric(precision=4, scale=0), > > primary_key=True) > > exchange_exchange = db.Column(db.Integer, primary_key=True) > > exchange_area_code_pk = db.Column(db.Integer, primary_key=True) > > > > __table_args__ = (db.ForeignKeyConstraint( > > ['exchange_exchange', 'exchange_area_code_pk'], > > ['exchange.exchange', 'exchange.area_code_pk'], > > ), > > ) > > > > Simon > > > > > > On 7 Mar 2013, at 23:49, Randall Degges <rdeg...@gmail.com> wrote: > > > > > Hi Lloyd, > > > > > > Thank you! I believe this is what I was trying to figure out, although > I am having further issues now. Here's a recent pastie with my improved > models, along with the errors I'm now having, http://pastie.org/6417080 > > > > > > What I've done (as you can probably see) is I've used the > ForeignKeyConstraint on my PhoneNumber table, to ensure that I'm able to > link to my exchanges table properly. Unfortunately, this looks like it is > not being picked up by SQLAlchemy, since it's complaining that I have no > Foreign Keys for that table. > > > > > > Also, just for reference, I've totally wiped / recreated my DBs to > test this, so I'm sure it isn't a result of migrations or anything like > that. > > > > > > If I run \d phonenumbers inside of psql, I get the following output ( > http://pastie.org/6417088), thought that might also be of help. > > > > > > Thank you all for your help so far, I can't wait to get this working! > > > > > > Best, > > > > > > -Randall > > > > > > > > > On Thu, Mar 7, 2013 at 5:41 AM, Lloyd Kvam <goo...@venix.com> wrote: > > > While primary_key is specified twice, once for each column, there is > only ONE primary key which is a composite. > > > > > > You need to use ForeignKeyConstraint at the Table level to specify a > composite foreign key. > > > > > > You need to provide two lists, the local table columns, and the > corresponding foreign table columns. > > > Now you know what to search for if you need more information. > > > > > > from the schema definition language docs > > > It’s important to note that the ForeignKeyConstraint is the only way > to define a composite foreign key. While we could also have placed > individual ForeignKey objects on both theinvoice_item.invoice_id and > invoice_item.ref_num columns, SQLAlchemy would not be aware that these two > values should be paired together - it would be two individual foreign key > constraints instead of a single composite foreign key referencing two > columns. > > > > > > > > > On Wednesday, March 6, 2013 9:00:56 PM UTC-5, Randall Degges wrote: > > > Hi Mike, > > > > > > Sorry about that, I actually had a typo there. I've got a correct code > sample available here > http://stackoverflow.com/questions/15260842/how-can-i-build-a-foreignkey-to-a-table-which-has-multiple-primary-keys(just > posted it). > > > > > > Thank you, > > > > > > -Randall > > > > > > > > > On Wed, Mar 6, 2013 at 5:54 PM, Michael Bayer <mik...@zzzcomputing.com> > wrote: > > > a database table can only have one primary key (hence "primary"), but > that key can contain more than one column (a "composite" primary key). > > > > > > the model you have here is a little unclear, did you mean for the > primary key of Exchange to be "exchange" , and the primary key of > PhoneNumber to be the composite of "exchange" and "phone number" ? that > would be my guess as to what you're looking for. > > > > > > > > > > > > On Mar 6, 2013, at 6:05 PM, Randall Degges <rde...@gmail.com> wrote: > > > > > >> Hi all, > > >> > > >> I'm having a lot of trouble figuring out how to properly build my > ForeignKey column for a table I'm defining. I've outlined my models here: > http://pastie.org/6407419# (and put a comment next to the problematic > line in my PhoneNumber model). > > >> > > >> Here's what's happening: > > >> > > >> My Exchange table has two primary keys. This is required for my use > case. > > >> > > >> The PhoneNumber table I'm trying to define needs a ForeignKey to the > Exchange table, but since the Exchange table has two primary keys, I can't > figure out how to make the relationship work. > > >> > > >> Any guidance would be appreciated. Thank you. > > >> > > >> -- > > >> You received this message because you are subscribed to the Google > Groups "sqlalchemy" group. > > >> To unsubscribe from this group and stop receiving emails from it, > send an email to sqlalchemy+...@googlegroups.com. > > >> > > >> To post to this group, send email to sqlal...@googlegroups.com. > > >> > > >> Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > > >> For more options, visit https://groups.google.com/groups/opt_out. > > >> > > >> > > > > > > > > > -- > > > You received this message because you are subscribed to the Google > Groups "sqlalchemy" group. > > > To unsubscribe from this group and stop receiving emails from it, send > an email to sqlalchemy+...@googlegroups.com. > > > > > > To post to this group, send email to sqlal...@googlegroups.com. > > > > > > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > > > > > > > > > > > > -- > > > Randall Degges > > > http://rdegges.com/ > > > > > > -- > > > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > > > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/L3Z8yDiFa7g/unsubscribe?hl=en > . > > > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > > > > > > To post to this group, send email to sqlalchemy@googlegroups.com. > > > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > > > > > > > > > > > > -- > > > Randall Degges > > > http://rdegges.com/ > > > > > > -- > > > You received this message because you are subscribed to the Google > Groups "sqlalchemy" group. > > > To unsubscribe from this group and stop receiving emails from it, send > an email to sqlalchemy+unsubscr...@googlegroups.com. > > > To post to this group, send email to sqlalchemy@googlegroups.com. > > > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > > > > -- > > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/L3Z8yDiFa7g/unsubscribe?hl=en > . > > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > > To post to this group, send email to sqlalchemy@googlegroups.com. > > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > > > > > > > -- > > Randall Degges > > http://rdegges.com/ > > > > -- > > You received this message because you are subscribed to the Google > Groups "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send > an email to sqlalchemy+unsubscr...@googlegroups.com. > > To post to this group, send email to sqlalchemy@googlegroups.com. > > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > > For more options, visit https://groups.google.com/groups/opt_out. > > > > > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/L3Z8yDiFa7g/unsubscribe?hl=en > . > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- Randall Degges *http://rdegges.com/* -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. For more options, visit https://groups.google.com/groups/opt_out.