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 [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
-~----------~----~----~----~------~----~------~--~---
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)