I've tried something like this before creating the table. Here
len(sites) is definitely evaluating to 6 as it should, but I'm only
getting the increment issue now.
sequence = Sequence('id_seq', start=siteIndex,
increment=len(sites), metadata=self.metadata)
sequence.create()
On Fri, Feb 4, 2011 at 2:46 PM, Josh Stratton <[email protected]> wrote:
> I'm currently passing the table the sequence object, when I create the
> table. I've been building the table with metadata.create_all.
>
> Calling sequnce.create() before creating the table complains of no
> binding to an engine or a connection. I understand this makes sense
> as I haven't told the sequence where to connect, but I don't see
> anything in the docs for connecting the sequence to the
> engine/connection. Is there a hidden parameter for binding? Or if I
> include this sequence in in the table, should that sequence be
> associated with the metadata object I use to make the table?
>
> sequence = Sequence('id_seq', start=siteIndex, increment=len(sites))
> #sequence.create()
>
> table = Table('acounts', self.metadata,
> Column(....))
>
> self.metadata.create_all()
>
>
> On Fri, Feb 4, 2011 at 1:46 PM, Michael Bayer <[email protected]>
> wrote:
>> The sequence has to be created (meaning, the appropriate DDL statements must
>> be executed) on the target platform with those options, or the appropriate
>> ALTER statements emitted to ALTER the sequence's settings.
>>
>> So when those flags are applied to sqlalchemy.Sequence(), its assumed that
>> you're using table.create(), metadata.create_all(), or sequence.create() to
>> issue the CREATE SEQUENCE call. The INCREMENT BY and START WITH clauses
>> should be emitted as of the 0.6 series of SQLAlchemy.
>>
>>
>>
>> On Feb 4, 2011, at 2:10 PM, Josh Stratton wrote:
>>
>>> I'm connecting to an Oracle database for my work and we do replication
>>> by periodically joining tables across sites instead of a single server
>>> just in case a link in between goes down. One issue with this though
>>> is I need to generate unique keys for a single table so if the
>>> connection does go down, insertions to both tables won't cause a
>>> conflict when it's time to merge.
>>>
>>> Because the ids aren't important to me during insertion, I just use a
>>> Sequence object (since Oracle doesn't support autoincrementing). This
>>> has worked fine, but I'm now trying how to combine this with the
>>> unique keys across the two sites. I noticed the Sequence class has a
>>> start and increment tag, which I thought would work perfectly by
>>> interleaving the keys per site.
>>>
>>> For example...
>>>
>>> if site1:
>>> init = 0
>>> else:
>>> init = 1
>>>
>>> sequence = Sequence('id_seq',start=init,increment=2)
>>>
>>> I don't see any actual documentation for what start and increment do
>>> (http://www.sqlalchemy.org/docs/core/schema.html#sqlalchemy.schema.Sequence),
>>> so I'm just assuming they function as I'd expect, where start is the
>>> first id to try and increment is the space between the possible id's,
>>> so site 1's ids will always be % 2 == 0, while site 2's would be % 2
>>> == 1.
>>>
>>> This doesn't seem to be what I'm getting however. In a few test cases
>>> on one site, the first id starts at 10,283 and the next one generated
>>> is 10,284. In this case it's starting at a crazy high value other
>>> than 0 and it doesn't seem to be incrementing at all. Am I using
>>> these flags incorrectly? Is this a bug in sqlalchemy? Deprecated
>>> flags? Or is this whole idea garbage and I should use a guid?
>>>
>>> Thanks.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "sqlalchemy" group.
>>> To post to this group, send email to [email protected].
>>> To unsubscribe from this group, send email to
>>> [email protected].
>>> For more options, visit this group at
>>> http://groups.google.com/group/sqlalchemy?hl=en.
>>>
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "sqlalchemy" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/sqlalchemy?hl=en.
>>
>>
>
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.