Hey Mike, thanks for getting back with me. I have to go to work soon but 
I'll try that out as soon as possible. Can you elaborate a little on what 
you mean by getting tripped up if I push it too far?

On Tuesday, August 22, 2017 at 9:26:42 PM UTC-5, Mike Bayer wrote:
>
> On Tue, Aug 22, 2017 at 9:42 PM, Joshua Peppeman 
> <joshuap...@gmail.com <javascript:>> wrote: 
> > Hello, 
> > 
> > I asked this question on Reddit and StackOverflow without any luck 
> getting 
> > an answer. Here is the StackOverflow question. I'll paste it below 
> again. 
> > 
> > 
> > I have two tables set up in Python with sqlalchemy using mySQL. They 
> look 
> > something like this: 
> > 
> > from sqlalchemy import * 
> > from sqlalchemy.orm import * 
> > from sqlalchemy.ext.declarative import declarative_base 
> > 
> > class Test(Base): 
> >     __tablename__ = 'test' 
> >     id = Column(Integer, primary_key=True) 
> >     questions = relationship('Question', cascade='all,delete', 
> > backref='test', uselist=True) 
> > 
> > class Question(Base): 
> >     __tablename__ = 'question' 
> >     testID = Column(Integer, ForeignKey('test.id', ondelete='CASCADE')) 
> >     sequence = Column(Integer, primary_key=True) 
> >     text = Column(String(500)) 
> > 
> > 
> > 
> > Right now when I run my code and get the tables set up, they look like 
> this: 
> > 
> > testID|sequence|text 
> > 
> > 1 | 1 | text 
> > 
> > 1 | 2 | text 
> > 
> > 1 | 3 | text 
> > 
> > 1 | 4 | text 
> > 
> > 2 | 5 | text 
> > 
> > 2 | 6 | text 
> > 
> > 2 | 7 | text 
> > 
> > But I want them to look like this: 
> > 
> > testID|sequence|text 
> > 
> > 1 | 1 | text 
> > 
> > 1 | 2 | text 
> > 
> > 1 | 3 | text 
> > 
> > 1 | 4 | text 
> > 
> > 2 | 1 | text 
> > 
> > 2 | 2 | text 
> > 
> > 2 | 3 | text 
> > 
> > I know that sequence is auto-incrementing because it is the first int 
> > primary key, but I only want it to auto-increment until there's a new 
> > testID. 
> > 
> > I could leave it and just sort them later, but I'd really like to set it 
> up 
> > where sequence resets with every new testID. I'm pretty new to 
> sqlAlchemy so 
> > I may be missing something obvious. Any help is appreciated. Thanks. 
>
> MySQL's autoincrement feature is strictly a single integer that 
> increases steadily.  If you want an integer that is cycling, you'd 
> need to maintain that number yourself on the Python side. 
> Additionally, you'd want to set up a composite primary key on 
> Question.   The orderinglist extension is a quick way to get the 
> counting-per-collection effect you are looking for (works on the 
> Python side though and it can get tripped up if you push it too far): 
>
> from sqlalchemy import * 
> from sqlalchemy.orm import * 
> from sqlalchemy.ext.declarative import declarative_base 
> from sqlalchemy.ext.orderinglist import ordering_list 
> Base = declarative_base() 
>
>
> class Test(Base): 
>     __tablename__ = 'test' 
>     id = Column(Integer, primary_key=True) 
>     questions = relationship( 
>         'Question', cascade='all,delete', backref='test', uselist=True, 
>         collection_class=ordering_list("sequence", count_from=1)) 
>
>
> class Question(Base): 
>     __tablename__ = 'question' 
>     testID = Column(Integer, ForeignKey('test.id', ondelete='CASCADE'), 
>                     primary_key=True) 
>     sequence = Column(Integer, primary_key=True) 
>     text = Column(String(500)) 
>
> e = create_engine("sqlite://", echo=True) 
> Base.metadata.create_all(e) 
> s = Session(e) 
>
>
> s.add_all([ 
>     Test( 
>         questions=[ 
>             Question(text="t1q1"), 
>             Question(text="t1q2"), 
>             Question(text="t1q3"), 
>             Question(text="t1q4"), 
>         ] 
>     ), 
>     Test( 
>         questions=[ 
>             Question(text="t2q1"), 
>             Question(text="t2q2"), 
>             Question(text="t2q3"), 
>             Question(text="t2q4"), 
>         ] 
>     ) 
> ]) 
>
> s.commit() 
>
>
> for row in s.query(Question.testID, Question.sequence, Question.text).\ 
>     order_by(Question.testID, Question.sequence): 
>     print row 
>
>
>
>
>
> > 
> > -- 
> > SQLAlchemy - 
> > The Python SQL Toolkit and Object Relational Mapper 
> > 
> > http://www.sqlalchemy.org/ 
> > 
> > To post example code, please provide an MCVE: Minimal, Complete, and 
> > Verifiable Example. See http://stackoverflow.com/help/mcve for a full 
> > description. 
> > --- 
> > 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 <javascript:>. 
> > To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>. 
> > Visit this group at https://groups.google.com/group/sqlalchemy. 
> > For more options, visit https://groups.google.com/d/optout. 
>

-- 
SQLAlchemy - 
The Python SQL Toolkit and Object Relational Mapper

http://www.sqlalchemy.org/

To post example code, please provide an MCVE: Minimal, Complete, and Verifiable 
Example.  See  http://stackoverflow.com/help/mcve for a full description.
--- 
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 https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to