Sorry, my bad, the attachment was wrong ( I had modified it in order to do
some fine-tuned tests) and would try to create more relations than objects.

-- 
Alan Franzoni <[EMAIL PROTECTED]>
-
Togli .xyz dalla mia email per contattarmi.
Remove .xyz from my address in order to contact me.
-
GPG Key Fingerprint (Key ID = FE068F3E):
5C77 9DC3 BD5B 3A28 E7BC 921A 0255 42AA FE06 8F3E


--~--~---------~--~----~------------~-------~--~----~
 You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---
from sqlalchemy import *
import random
import string
import sys
import logging

random.seed()

#quick random string recipe by Pradeep Kishore Gowda found on ASPN
def nicepass(alpha=6,numeric=2):
    """
    returns a human-readble password (say rol86din instead of 
    a difficult to remember K8Yn9muL ) 
    """
    vowels = ['a','e','i','o','u']
    consonants = [a for a in string.ascii_lowercase if a not in vowels]
    digits = string.digits
    
    ####utility functions
    def a_part(slen):
        ret = ''
        for i in range(slen):            
            if i%2 ==0:
                randid = random.randint(0,20) #number of consonants
                ret += consonants[randid]
            else:
                randid = random.randint(0,4) #number of vowels
                ret += vowels[randid]
        return ret
    
    def n_part(slen):
        ret = ''
        for i in range(slen):
            randid = random.randint(0,9) #number of digits
            ret += digits[randid]
        return ret
        
    ####     
    fpl = alpha/2        
    if alpha % 2 :
        fpl = int(alpha/2) + 1                     
    lpl = alpha - fpl    
    
    start = a_part(fpl)
    mid = n_part(numeric)
    end = a_part(lpl)
    
    return "%s%s%s" % (start,mid,end)

postgres_engine = create_engine("postgres://user:[EMAIL PROTECTED]:5432/testsa", echo=False, encoding="utf8", convert_unicode=True)
metadata = BoundMetaData(postgres_engine)

editore = Table("editore", metadata,
    Column("id", Integer, Sequence("editore_id_seq"),
            primary_key=True ),
    Column("editore", String(40), nullable=False, unique=True),
    Column("edit_indirizzo", String(60)),
    Column("edit_telefono", String(30)),
    Column("edit_sito", String(80)),
    Column("edit_email", String(50)),
    Column("edit_note", TEXT),
    Column("last_upd", DateTime)
           )
           
reparto = Table("reparto", metadata,
    Column("id", Integer, Sequence("reparto_id_seq"),
            primary_key=True),
    Column("reparto", String(15), nullable=False, unique=True),
    Column("rep_descrizione", String(60) ),
    Column("aliq", Integer ),
    Column("last_upd", DateTime)
    )


editorereparto = Table("editorereparto", metadata,
    Column("editore_id", Integer, ForeignKey("editore.id"), primary_key=True),
    Column("reparto_id", Integer, ForeignKey("reparto.id"), primary_key=True),
    Column("last_upd", DateTime),
                        )

formato = Table("formato", metadata,
    Column("id", Integer, Sequence("formato_id_seq"),
            primary_key=True, nullable=False, ),
    Column("formato", String(20),  nullable=False, unique=True),
    Column("form_descr", String(60)),
    Column("last_upd", DateTime),
    )
 

formatoreparto = Table("formatoreparto", metadata,
    Column("reparto_id", Integer, ForeignKey("reparto.id"), primary_key=True),
    Column("formato_id", Integer, ForeignKey("formato.id"),primary_key=True ),
    Column("last_upd", DateTime),
   
    )


metadata.create_all()

class Reparto(object):
    pass

class Editore(object):
    pass

class Formato(object):
    pass

class CustomMapperExtension(MapperExtension):

#choose whether to override default create_instance
    if True:
        def create_instance(self, mapper, selectcontext, row, class_):
           return class_()

       
CustomExt=CustomMapperExtension()

Reparto.mapper = mapper(Reparto, reparto, extension=CustomExt)
Editore.mapper = mapper(Editore, editore, extension=CustomExt)
Formato.mapper = mapper(Formato, formato, extension=CustomExt)


#mtm properties block - without backref
if True:
    Reparto.mapper.add_property("editori", relation(Editore, secondary=editorereparto,
                                                                                lazy=True, cascade="all"))
                                                                                    #))
    Reparto.mapper.add_property("formati", relation(Formato, secondary=formatoreparto,
                                                                                lazy=True, cascade="all"))
                                                                                    #))
    Editore.mapper.add_property("reparti", relation(Reparto, secondary=editorereparto,
                                                                                lazy=True, cascade="all"))
                                                                                    #))
    Formato.mapper.add_property("reparti", relation(Reparto, secondary=formatoreparto,
                                                                                lazy=True, cascade="all"))
                                                                                    #))
#end mtm properties block - without backref

##mtm properties block - with backref
#if True:
#    Reparto.mapper.add_property("editori", relation(Editore, secondary=editorereparto,
#                                                                                lazy=False, cascade="all", backref="reparti"))
#                                                                                    #))
#    Reparto.mapper.add_property("formati", relation(Formato, secondary=formatoreparto,
#                                                                                lazy=False, cascade="all", backref="reparti"))
##end mtm properties block - with backref

Reparto.mapper.compile()
Formato.mapper.compile()
Editore.mapper.compile()


session = create_session()

#choose whether to create new random objects


if True:

    #create some dummy objects
    for mapped_class in (Formato, Reparto, Editore)*10:
        newobj = mapped_class()
        setattr(newobj, mapped_class.__name__.lower(), nicepass(10,1))
        session.save(newobj)
    session.flush()

session.clear()

#choose whether to create new random relations
if True:
    #create some random relations
    for rep in session.query(Reparto).select()*3:
        print "adding random relation"
        rand_form = random.choice(session.query(Formato).select())
        rand_edit = random.choice(session.query(Editore).select())
        
        if rand_form not in rep.formati: 
            print "adding random formatoreparto relation"
            rep.formati.append(rand_form)
            
        if rand_edit not in rep.editori:
            print "adding random editorereparto relation"
            rep.editori.append(rand_edit)

    session.flush()

session.clear()

rep = session.query(Reparto).get_by(id=1)
edit = session.query(Editore).get_by(id=1)
form = session.query(Formato).get_by(id=1)

print rep.formati, len(rep.formati)
print edit.reparti, len(edit.reparti)
print form.reparti, len(form.reparti)




        
    

    




                                                                            
                                                                            

Reply via email to