2013-01-19 15 views
9

मैं निम्नलिखित मॉडल:SQLAlchemy शिकायत है कि विदेशी कुंजी मौजूद नहीं है, लेकिन वास्तव में यह मौजूद है

class Look(Base): 
    __tablename__ = "looks" 
    id = Column(Integer, primary_key=True) 
    url = Column(String, nullable=False, unique=True) 

class Similarity(Base): 
    __tablename__ = 'similarities' 
    __table_args__ = (UniqueConstraint('look_id_small', 'look_id_big'),) 
    id = Column(Integer, primary_key=True) 
    look_id_small = Column(Integer, ForeignKey('looks.id'), nullable=False) 
    look_id_big = Column(Integer, ForeignKey('looks.id'), nullable=False) 

मुझे इस कोड चला रहा हूँ:

try: 
    with session.begin_nested(): 
    similarity = Similarity() 
    similarity.look_id_small, similarity.look_id_big = look_id1, look_id2 
    session.add(similarity) 
    session.commit() 
except Exception, e: 
    logging.error(e) 
    print "look_id1: %s, look_id2: %s" % (look_id1, look_id2) 

यह त्रुटि मैं हो रही है :

2013-01-19 04:55:42,974 ERROR Foreign key associated with column 'similarities.look_id_small' could not find table 'looks' with which to generate a foreign key to target column 'id' 
look_id1: 217137, look_id2: 283579 

तो मैं pgsql में इन मूल्यों की तलाश करने की कोशिश की और वे मौजूद हैं!

giordano=# SELECT * FROM looks WHERE id = 217137 or id = 283579; 
    id |      url      | title | image_url | 
--------+-----------------------------------------------+-------+-----------+ 
217137 | http://foo.com        |  |   |  
283579 | http://baz.com        |  |   | 
(2 rows) 

मैंने पूरी रात इसे समझने की कोशिश की है।

कुछ सुराग:

  1. मैं केवल कुछ मूल्यों पर इन त्रुटियों को मिल रहा है।
  2. मुझे नहीं लगता कि एक ही टेबल पर डबल विदेशीकी होने के परिणामस्वरूप एक समस्या होगी।

कोई भी?

संपादित करें:

LOG: statement: BEGIN 
LOG: statement: select version() 
LOG: statement: select current_schema() 
LOG: statement: show transaction isolation level 
LOG: statement: SELECT CAST('test plain returns' AS VARCHAR(60)) AS anon_1 
LOG: statement: SELECT CAST('test unicode returns' AS VARCHAR(60)) AS anon_1 
LOG: statement: ROLLBACK 
LOG: statement: BEGIN 
LOG: statement: DECLARE "c_10dfc08d0_1L" CURSOR WITHOUT HOLD FOR SELECT feedbacks.id AS feedbacks_id, feedbacks.user_id AS feedbacks_user_id, feedbacks.look_id AS feedbacks_look_id 
    FROM feedbacks 
    LIMIT 500 
LOG: statement: FETCH FORWARD 1 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 5 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 10 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 20 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 50 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 100 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 250 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 500 FROM "c_10dfc08d0_1L" 
LOG: statement: FETCH FORWARD 1000 FROM "c_10dfc08d0_1L" 
LOG: statement: CLOSE "c_10dfc08d0_1L" 
LOG: statement: ROLLBACK 
LOG: unexpected EOF on client connection 

मैं किसी भी "आवेषण" नहीं दिखाई दे रहा:

giordano=# \d+ looks 
               Table "public.looks" 
    Column  |  Type  |      Modifiers      | Storage | Description 
---------------+-------------------+----------------------------------------------------+----------+------------- 
id   | integer   | not null default nextval('looks_id_seq'::regclass) | plain | 
url   | character varying | not null           | extended | 
Indexes: 
    "looks_pkey" PRIMARY KEY, btree (id) 
    "looks_url_key" UNIQUE CONSTRAINT, btree (url) 
Referenced by: 
    TABLE "similarities" CONSTRAINT "similarities_look_id_big_fkey" FOREIGN KEY (look_id_big) REFERENCES looks(id) 
    TABLE "similarities" CONSTRAINT "similarities_look_id_small_fkey" FOREIGN KEY (look_id_small) REFERENCES looks(id) 
Has OIDs: no 

giordano=# \d+ similarities 
              Table "public.similarities" 
    Column  |  Type  |       Modifiers       | Storage | Description 
---------------+------------------+-----------------------------------------------------------+---------+------------- 
id   | integer   | not null default nextval('similarities_id_seq'::regclass) | plain | 
look_id_small | integer   | not null             | plain | 
look_id_big | integer   | not null             | plain | 
Indexes: 
    "similarities_pkey" PRIMARY KEY, btree (id) 
    "similarities_look_id_small_look_id_big_key" UNIQUE CONSTRAINT, btree (look_id_small, look_id_big) 
Foreign-key constraints: 
    "similarities_look_id_big_fkey" FOREIGN KEY (look_id_big) REFERENCES looks(id) 
    "similarities_look_id_small_fkey" FOREIGN KEY (look_id_small) REFERENCES looks(id) 
Has OIDs: no 

संपादित

मेरी PostgreSQL बयान को चालू करने के बाद, इस मैं क्या देख रहा हूँ है। क्यूं कर?

+0

डेटा मॉडल ठीक दिखता है। जेनरेट की गई क्वेरी को खोदने का प्रयास करें (शायद पोस्टग्रेस लॉग से?) – wildplasser

+0

क्या इससे मदद मिलती है? त्रुटि look_id1: 34,816, look_id2: 283,143 2013-01-19 06: 10: 25,559 जानकारी sqlalchemy.engine.base.Engine savepoint sa_savepoint_2 2013-01-19 06: 10: 25,560 जानकारी sqlalchemy.engine.base.Engine {} 2013-01-19 06: 10: 25,561 INFO sqlalchemy.engine.base.Engine रोलबैक से SAVEPOINT sa_savepoint_2 2013-01-19 06: 10: 25,561 INFO sqlalchemy.engine.base.Engine {} – disappearedng

+0

नहीं, सहायता नहीं करता है। उत्पन्न SQL क्वेरी खोजने का प्रयास करें। आपको सभी कथन लॉग करने के लिए अपने पोस्टग्रेज़ लॉगिंग स्तर को क्रैंक करने की आवश्यकता हो सकती है (या केवल असफल वाले) – wildplasser

उत्तर

4

विदेशीके (Look.id) का उपयोग करके बाहर निकलता है चाल चल रहा है !!

#sqllachemy से argonholm के अनुसार:

18:25 agronholm: ('देखो शायद ForeignKey: मुझे लगता है कि करने के लिए है कि पाठ फार्म तालिका में संदर्भ के लिए वाक्य रचना क्या आप 18:26 agronholm की उम्मीद नहीं है होगा। आईडी ') भी काम करेगा?

संबंधित मुद्दे