It seems to be a bug that web2py is not reporting the correct error message.
It says invalid tablename if it is already defined, yet it should report
that the table already exists... I'll send a patch to Massimo.

--
Thadeus




On Wed, Oct 20, 2010 at 11:28 AM, mart <[email protected]> wrote:

> hum.. interesting... just got what you meant by dal vs sql.... now
> that I think of it, Massimo did mention that dal was a 2nd rev of sql
> and that it was experimental. but, that said. I have been using dal,
> not sql.  I did have to tweak a few things to make it work, but in
> general, works great for me.
>
> I have not specified neither migrate nor fake_migrate. I just know
> that dal will make use of them when creating table
> (t._create(migrate=migrate, fake_migrate=fake_migrate) Note: I think
> there is an equivalent t.create (no under score but would have to
> check how they differ). Note, about 1/2 the tables I create are
> created on the fly, and the table_name will depend on how some
> upstream variables get resolved (can change a lot)...
>
> One mistake I kept making that kept causing exceptions (until my brain
> was sufficiently caffeinated) was when creating some Objects (of
> whatever type, again on the fly), I kept making the mistake of using a
> var name for the table_name, previously used elsewhere where that name
> had served to name a new reference to a class (sorry for the
> ridiculous sentence (sounds better in french ;)) - I think I meant I
> re-used var names).
>
> myVar = "generated_class"         <-- something generates this string
> ref_to_class_generated = myVar    <-- "a" is just the name
> ...
>
> later instantiate new class
>
> myVar = name_of_ref_to_class_previously_generated
> myVar = initNewObj(data)
> myVar.DoStuff()
> bla bla bla
>
> myVar = str(some_object) --> 'className_is_now_a_string'
> so later if I did something like this:
> tableName = myVar
> db.define_table(tableName,
>          SQLField('name'),
>          SQLField('value'))
>
> I got that bad table name exception, then it went through that
> migrate,fake_migrate bit.
> So I re-use the name but I tag it for the tableName with a '_name', so
> they don"t get confused.
> I.e.
> myVar_name = str(some_object) -->
> 'className_is_still_a_string_but_this_worked'
>
> had no issues since.
>
> Mart :)
>
>
>
> On Oct 20, 11:12 am, Thadeus Burgess <[email protected]> wrote:
> > In my experience the dal.py does not work stand alone, however sql.py
> does.
> >
> > Table migrations have always worked for me when using standalone.
> >
> > --
> > Thadeus
> >
> > On Wed, Oct 20, 2010 at 9:58 AM, Bruno Rocha <[email protected]>
> wrote:
> > > did you specified both migrate and fake_migrate ?
> >
> > > 2010/10/20 mart <[email protected]>
> >
> > > forgot to mention something a well...
> >
> > >> I think the issue I had was related to yours with the migration,
> > >> because creating a table, without specifying migrate=  produces the
> > >> following exception while defining a table. That migration data as
> > >> well as the parameters I passed in both get validated by
> > >> t._create(migrate=migrate, fake_migrate=fake_migrate). This is why I
> > >> think migrating or creating tables with no migration... both are
> > >> subject to the same rules, risking the same exceptions.
> >
> > >>        db.define_table(tableName,
> > >>                    SQLField('blueModuleStr'),
> > >>                    SQLField('blueModuleObj','blob'),
> > >>                    SQLField('blueModuleImports'))
> >
> > >>    objMakeDB.instModule(folder)
> > >>  File "/Users/mart/Documents/Aptana Studio Workspace/blueLite/src/
> > >> blueLite/pyModules/createModuleTable.py", line 34, in instModule
> >
> > >>    SQLField('blueModuleImports'))
> > >>  File "/Users/mart/Documents/Aptana Studio Workspace/blueLite/src/
> > >> blueLite/pyUtils/gluon/dal.py", line 1399, in define_table
> >
> > >>    t._create(migrate=migrate, fake_migrate=fake_migrate)
> > >>  File "/Users/mart/Documents/Aptana Studio Workspace/blueLite/src/
> > >> blueLite/pyUtils/gluon/dal.py", line 1869, in _create
> >
> > >> Mart :)
> >
> > >> On Oct 19, 7:11 pm, mart <[email protected]> wrote:
> > >> > I have recently introduced the web2py DAL to some back-end stuff so
> > >> > that it would play well with the front end (web2py). Although I did
> > >> > trim it down and the amount of files in the gluon folder (I
> bootstrap
> > >> > for each start of each software build, so size matters) and got rid
> of
> > >> > some unresolved imports caused by the triming (i don't need web
> access
> > >> > here, just the dal). So, are you taking about where (path) the .db
> and
> > >> > tables get created? if this is the case, then I found 2 things:
> >
> > >> > 1) the db and tables don't seem to follow the same rule in that the
> db
> > >> > can get created just about anywhere, where the tables seem to get
> > >> > created relative to where *db.define_table(tableName,...)* is called
> > >> > (seems to be the default). so depending on where you are in the
> > >> > structure... also, I notice I had to be xtra sensitive with error
> > >> > handling in that, if a previous step failed to lets say do an update
> > >> > or an insert and if I didn't handle that well at THAT moment, then
> the
> > >> > next time that field was referenced (which caused an exception), it
> > >> > create the entire set of default tables I setup and would do so
> where
> > >> > ever the module doing the EXECUTE would be. Which lead to look at
> > >> > dal.py
> >
> > >> > 2)so, her, the code can be changed to modify that behavior, and I
> kept
> > >> > good focus while following the flow of the script, but it is
> > >> > relatively large file, and I didn't take notes as I was reading. But
> > >> > it should be doable. the trick is to isolate the code directly
> related
> > >> > to 1) the adapter of the of the db your are using and the table/and
> > >> > migration related actions (that's where we see most of the
> references
> > >> > to the folder housing the tables). I haven't tried yet, and i don"t
> > >> > know if doing this would offend Massimo, so I held back and stuck
> with
> > >> > being relative to the folders where I generate tables.
> >
> > >> > BTW - i believe this is the code causing your exception, so one of
> > >> > your params is not in line with what's expected ("if not in key") or
> > >> > its type is wrong (just guessing though).
> >
> > >> >         for key in args:
> > >> >             if key not in [
> > >> >                     'migrate',
> > >> >                     'primarykey',
> > >> >                     'fake_migrate',
> > >> >                     'format',
> > >> >                     'trigger_name',
> > >> >                     'sequence_name']:
> > >> >                 raise SyntaxError, 'invalid table "%s" attribute:
> %s'
> > >> > % (tablename, key)
> >
> > >> > hope it helps.
> >
> > >> > Mart :)
> >
> > >> > On Oct 19, 3:37 pm, Bruno Rocha <[email protected]> wrote:
> >
> > >> > > Somebody knows a trick?
> >
> > >> > > 2010/10/19 Bruno Rocha <[email protected]>
> >
> > >> > > > I forgot to mention that I tried:
> >
> > >> > > >  DAL(....,folder=...) pointing folder="" to the directory where
> > >> .table
> > >> > > > files are, but does not works.
> >
> > >> > > > 2010/10/19 Bruno Rocha <[email protected]>
> >
> > >> > > > I know DAL was not made for that, but I'm using the DAL in a
> desktop
> > >> > > >> application with PyGTK, and it is working very well :-)
> >
> > >> > > >> It is a simple application that monitors the presence of
> employees
> > >> in a
> > >> > > >> company and reads small CSV files from a time clock,
> > >> > > >> people has cards that open the gates/doors of the company
> factory,
> > >> I use a
> > >> > > >> stream to read the track from serial port of time clock,
> > >> > > >> then, I take the information serialized as CSV, I parse and
> write
> > >> it into
> > >> > > >> SQLite db, after that , the Janitor uses a PyGTK app to access
> that
> > >> > > >> information.
> >
> > >> > > >> already been running for about 6 months, So far everything is
> > >> working
> > >> > > >> fine, but I can not run the automatic migrations.
> >
> > >> > > >> Does anyone know a way to make migration work automatically
> with
> > >> DAL Stand
> > >> > > >> Alone?
> >
> > >> > > >> I'm importing sql.py I'm connecting with SQLite, setting
> tables,
> > >> accessing
> > >> > > >> and doing out any crud operation.
> >
> > >> > > >> The only thing missing is to make migration works.
> >
> > >> > > >> I already set migrate='Mytable.table' and I tried with
> migrate=True
> >
> > >> > > >> ----
> > >> > > >> An example of what I have working in my
> >
> > >> > > >> "connect.py"
> > >> > > >> >>> from gluon.sql import *
> > >> > > >> >>> db = DAL('sqlite://timeclock1.db')
> > >> > > >> >>> Track =
> >
> > >>
> db.define_table('track',Field('regnumber','integer'),Field('action','integer'),Field('timestamp','datetime'),migrate='track.table')
> >
> > >> > > >> "Form_workflow.py"
> > >> > > >> >>> Track.insert(regnumber=123,action=2,timestamp='2010-10-19')
> > >> > > >> 1
> > >> > > >> >>> Track.insert(regnumber=124,action=2,timestamp='2010-10-19')
> > >> > > >> 2
> > >> > > >> >>> db.commit
> >
> > >> > > >> Until here, its ok.
> >
> > >> > > >> But now I am wanting to change the model, and including
> > >> > > >> Field('department')
> >
> > >> > > >>  "connect.py"
> > >> > > >> >>> Track =
> >
> > >>
> db.define_table('track',Field('regnumber','integer'),Field('action','integer'),Field('timestamp','datetime'),
> > >> > > >> *Field('department')*,migrate='track.table')
> >
> > >> > > >> Traceback (most recent call last):
> > >> > > >>   File "<stdin>", line 1, in <module>
> > >> > > >>   File "/bin/DAL/gluon/sql.py", line 1346, in define_table
> > >> > > >>     raise SyntaxError, 'invalid table name: %s' % tablename
> > >> > > >> SyntaxError: invalid table name: track
> >
> > >> > > >> ----
> >
> > >> > > >> If this is not possible, I'll have to create new fields in
> SQLite
> > >> and then
> > >> > > >> update my model.
> >
> > >> > > > --
> >
> > >> > > >http://rochacbruno.com.br
> >
> > >> > > --
> >
> > >> > >http://rochacbruno.com.br
> >
> > > --
> >
> > >http://rochacbruno.com.br
> >
> >
>

Reply via email to