2EBQ2hT2PLXMWmMiq4LeKI changeset

Changeset373135353430 (b)
ParentNone (a)
ab
0+########### Regular SQLAlchemy works correctly
0+from sqlalchemy import *
0+from sqlalchemy.orm import *
0+from sqlalchemy.ext.declarative import declarative_base
0+
0+Model = declarative_base("sqlite://")
0+
0+class Parent(Model):
0+    __tablename__ = 'parents'
0+    id = Column(Integer, primary_key=True)
0+
0+class Child(Model):
0+    __tablename__ = 'children'
0+    id = Column(Integer, primary_key=True)
0+    parent_id = Column(Integer, ForeignKey('parents.id'))
0+    parent = relationship(Parent, backref=backref('children', order_by=id.desc()))
0+
0+    def __repr__(self):
0+        return "<Child id=%s>" % self.id
0+
0+Model.metadata.create_all()
0+parent = Parent()
0+child1 = Child(parent=parent)
0+child2 = Child(parent=parent)
0+
0+session = sessionmaker()()
0+session.add(parent)
0+session.add(child1)
0+session.add(child2)
0+session.commit()
0+for child in parent.children:
0+    print child.id
0+# prints 2,1 like it's supposed to
0+
0+########### Flask Extension screws up the ordering
0+from flask import Flask
0+from flaskext.sqlalchemy import SQLAlchemy
0+
0+app = Flask(__name__)
0+db = SQLAlchemy(app)
0+
0+class Parent(db.Model):
0+    __tablename__ = 'parents'
0+    id = db.Column(db.Integer, primary_key=True)
0+
0+class Child(db.Model):
0+    __tablename__ = 'children'
0+    id = db.Column(db.Integer, primary_key=True)
0+    parent_id = db.Column(db.Integer, db.ForeignKey('parents.id'))
0+    parent = db.relationship(Parent, backref=db.backref('children', order_by=id.desc()))
0+
0+    def __repr__(self):
0+        return "<Child id=%s>" % self.id
0+
0+db.create_all()
0+parent = Parent()
0+child1 = Child(parent=parent)
0+child2 = Child(parent=parent)
0+
0+db.session.add(parent)
0+db.session.add(child1)
0+db.session.add(child2)
0+db.session.commit()
0+for child in parent.children:
0+    print child.id
0+# Prints 1,2 despite my order_by=id.desc() in this relationship
...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
--- Revision None
+++ Revision 373135353430
@@ -0,0 +1,66 @@
+########### Regular SQLAlchemy works correctly
+from sqlalchemy import *
+from sqlalchemy.orm import *
+from sqlalchemy.ext.declarative import declarative_base
+
+Model = declarative_base("sqlite://")
+
+class Parent(Model):
+ __tablename__ = 'parents'
+ id = Column(Integer, primary_key=True)
+
+class Child(Model):
+ __tablename__ = 'children'
+ id = Column(Integer, primary_key=True)
+ parent_id = Column(Integer, ForeignKey('parents.id'))
+ parent = relationship(Parent, backref=backref('children', order_by=id.desc()))
+
+ def __repr__(self):
+ return "<Child id=%s>" % self.id
+
+Model.metadata.create_all()
+parent = Parent()
+child1 = Child(parent=parent)
+child2 = Child(parent=parent)
+
+session = sessionmaker()()
+session.add(parent)
+session.add(child1)
+session.add(child2)
+session.commit()
+for child in parent.children:
+ print child.id
+# prints 2,1 like it's supposed to
+
+########### Flask Extension screws up the ordering
+from flask import Flask
+from flaskext.sqlalchemy import SQLAlchemy
+
+app = Flask(__name__)
+db = SQLAlchemy(app)
+
+class Parent(db.Model):
+ __tablename__ = 'parents'
+ id = db.Column(db.Integer, primary_key=True)
+
+class Child(db.Model):
+ __tablename__ = 'children'
+ id = db.Column(db.Integer, primary_key=True)
+ parent_id = db.Column(db.Integer, db.ForeignKey('parents.id'))
+ parent = db.relationship(Parent, backref=db.backref('children', order_by=id.desc()))
+
+ def __repr__(self):
+ return "<Child id=%s>" % self.id
+
+db.create_all()
+parent = Parent()
+child1 = Child(parent=parent)
+child2 = Child(parent=parent)
+
+db.session.add(parent)
+db.session.add(child1)
+db.session.add(child2)
+db.session.commit()
+for child in parent.children:
+ print child.id
+# Prints 1,2 despite my order_by=id.desc() in this relationship