On Jul 10, 2010, at 12:07 PM, Harry Percival wrote:

> OK, just in case anyone else is foolishly trying  to run SQLA on ironpython, 
> here's the workaround I've found:
> 
> instead of attempting to use the mapper directly on the join:
> 
> j = join(movies_table,md_table).join(directors_table)
> mapper(MoviesAndDirectors,j) #ipy errors here

> use a mapper on a select based on the join:
> 
> mapper(MoviesAndDirectors,j.select(use_labels=True).alias('moviesanddirectors'))
> 
> seems to be working ok for now.
> 
> one final, polite plea - how can i run the sqla test suite, to see what other 
> bugs might be lurking?

running the tests is fully described in README.unittests




> 
> cheers,
> Harry
> 
> 
> On Thu, Jul 8, 2010 at 10:52 AM, Harry Percival <harry.perci...@gmail.com> 
> wrote:
> Here's the source code of my test - let me know if I'm doing anything wrong 
> here
> 
> from sqlalchemy import create_engine
> from sqlalchemy.orm import mapper
> from sqlalchemy.sql.expression import join
> from sqlalchemy.orm.session import sessionmaker
> from sqlalchemy.schema import MetaData
> import traceback
> 
> try:
>     import clr
>     import os
>     import sys
>     sys.path.append(os.path.join(os.path.abspath(os.path.curdir),'sqlite'))
>     clr.AddReference('Ironpython.Sqlite')  #need this for sqlite to work on 
> ironpython. refers to a dll in zip file.
> except:
>     #not ipy
>     pass
> #from sqlalchemy.ext.sqlsoup import SqlSoup #sqlsoup also errors
> 
> engine = create_engine('sqlite:///moviedemo_simple.db3')  #moviedemo file 
> also in zip file.
> Session = sessionmaker(bind=engine)
> class Movies(object):
>     pass
> class Directors(object):
>     pass
> class Genres(object):
>     pass
> class MoviesAndDirectors(object):
>     pass
> 
> meta = MetaData()
> meta.reflect(bind=engine)
> all_tables = meta.tables
> 
> movies_table = all_tables['movies']
> genres_table = all_tables['genres']
> directors_table = all_tables['directors']
> md_table = all_tables['movie_directors']
> 
> mapper(Movies,movies_table)
> mapper(Directors,directors_table)
> mapper(Genres,genres_table)
> 
> session = Session()
> print session.query(Movies).all()[0]
> print session.query(Directors).all()[0]
> 
> j = join(movies_table,md_table).join(directors_table)
> try:
> 
>     mapper(MoviesAndDirectors,j)#ipy errors here
>     mad1 = session.query(MoviesAndDirectors).all()[0]
>     print mad1
> except Exception, e:
>     print 'caught exception',e
>     last_error = e
>     traceback.print_exc()
> 
> how can i run the sqlalchemy test suite?  I see it needs nose, i've installed 
> that.  but i'm not clear what command to run to launch tests.
> 
> rgds,
> harry
> 
> 
> On Tue, Jul 6, 2010 at 6:40 PM, Harry Percival <harry.perci...@gmail.com> 
> wrote:
> Hi Michael,
> 
> thanks for replying - the reason I attached a zipfile is because sqlite isn't 
> supported natively on ironpython, so I've had to include the source and a dll 
> for it.  So, if you did have time to open it up and take a peek, I'd very 
> much appreciate it.
> 
> Alternatively, how can I run the sqla unit tests?
> 
> 
> On Tue, Jul 6, 2010 at 3:56 PM, Michael Bayer <mike...@zzzcomputing.com> 
> wrote:
> 
> On Jul 6, 2010, at 4:18 AM, Harry Percival wrote:
> 
>> Hi,
>> 
>> I've got an error which occurs in ironpython but not in cpython. can anyone 
>> replicate?  See attached. I'm using IPY 2.6.
>> 
>> <string>:1: DeprecationWarning: object.__init__() takes no parameters for 
>> type _keyed_weakref
>> <string>:1: DeprecationWarning: object.__init__() takes no parameters for 
>> type KeyedRef
>> <Movies object at 0x0000000000000034>
>> <Directors object at 0x0000000000000038>
>> caught exception 'NoneType' object has no attribute 'set'
>> Traceback (most recent call last):
>>  File "D:\workspace\resolver\test_multitable.py", line 54, in <module>
>>    mapper(MoviesAndDirectors,j)#ipy errors here
>>  File "D:\workspace\resolver\sqlalchemy\orm\__init__.py", line 818, in mapper
>>    return Mapper(class_, local_table, *args, **params)
>>  File "D:\workspace\resolver\sqlalchemy\orm\mapper.py", line 210, in __init__
>>    self._configure_properties()
>>  File "D:\workspace\resolver\sqlalchemy\orm\mapper.py", line 563, in 
>> _configure_properties
>>    self._configure_property(column_key,
>>  File "D:\workspace\resolver\sqlalchemy\orm\mapper.py", line 755, in 
>> _configure_property
>>    prop.instrument_class(self)
>>  File "D:\workspace\resolver\sqlalchemy\orm\properties.py", line 87, in 
>> instrument_class
>>    attributes.register_descriptor(
>>  File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 1424, in 
>> register_descriptor
>>    manager.instrument_attribute(key, descriptor)
>>  File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 1012, in 
>> instrument_attribute
>>    self.install_descriptor(key, inst)
>>  File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 1054, in 
>> install_descriptor
>>    setattr(self.class_, key, inst)
>>  File "D:\workspace\resolver\sqlalchemy\orm\attributes.py", line 151, in 
>> __set__
>>    self.impl.set(instance_state(instance), instance_dict(instance), value, 
>> None)
>> AttributeError: 'NoneType' object has no attribute 'set'
>> 
>> 
>> 
>> does this look like a bug with ironpython? if so, I'll report it to the 
>> developers, but i need a little more help tracking down exactly what's going 
>> wrong...
> 
> its likely some slightly different behavior in ironpython regarding 
> descriptors.   If you don't have a lot of SQLA experience, it would be 
> extremely difficult to get SQLA running with a new Python interpreter.   
> Getting it to run on Jython took a huge amount of effort and weeks/months of 
> bughunting, both in SQLA and Jython itself.  We currently don't have any 
> resources to get it to work on IronPython as well.
> 
> 
>> 
>> For bonus points:  In the attached database, there's a many-to-many 
>> relationship between 'movies' and 'directors' via a simple joining table.  
>> How come SQLA isn't able to figure this out on its own and let me just 
>> join(movies_table, directors_table)? It seems unneccesary to have to specify 
>> the extra join(movies_table,md_table).join(directors_table)...
> 
> I don't generally open full zipfiled applications, so if you want to attach a 
> succinct, single-file code example that would help.   If you have 
> relationships between two classes, the relationship() function is used to 
> establish that, which would allow query.join(Movie.directors) to generate the 
> joins automatically.
> 
> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 
> 
> 
> -- 
> ------------------------------
> Harry J.W. Percival
> ------------------------------
> Italy Mobile: +39 389 095 8959
> UK Mobile:  +44 (0) 78877 02511 (may be turned off)
> Skype:         harry.percival
> Email:          harry.perci...@gmail.com
> 
> 
> 
> -- 
> ------------------------------
> Harry J.W. Percival
> ------------------------------
> Italy Mobile: +39 389 095 8959
> UK Mobile:  +44 (0) 78877 02511 (may be turned off)
> Skype:         harry.percival
> Email:          harry.perci...@gmail.com
> 
> 
> 
> -- 
> ------------------------------
> Harry J.W. Percival
> ------------------------------
> Italy Mobile: +39 389 095 8959
> UK Mobile:  +44 (0) 78877 02511
> Skype:         harry dot percival
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> 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 sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to