If the table exists than:

legacy_db = DAL('sqlite://mutualfunds.sqlite', migrate_enabled = True, 
fake_migrate_all = True)

will create the metadata. if both table and metadata exist than:

legacy_db = DAL('sqlite://mutualfunds.sqlite', migrate_enabled = False)

should successfully connect

if the table does not exist (not your case), then

legacy_db = DAL('sqlite://mutualfunds.sqlite', migrate_enabled = True)

will create.

On Wednesday, 9 May 2018 05:38:45 UTC-5, 黄祥 wrote:
>
> tryin to learn extract database models, all database is generated from 
> web2py app, then create new web2py app named test1, copy the database 
> (sqlite) to test1 databases folder, for mysql test is remaining from 
> another web2py app
> *sqlite using terminal*
> python ~/web2py/scripts/extract_sqlite_models.py 
> ~/web2py/applications/test1/databases/test1.sqlite
>
> *result in terminal (cutted)*
> legacy_db = DAL('sqlite://mutualfunds.sqlite')
> legacy_db.define_table('auth_user',
>     migrate=False)
>
> *mysql using terminal*
> python ~/web2py/scripts/extract_mysql_models.py root:@localhost/test1
>
> *result in terminal (cutted)*
> legacy_db = DAL('mysql://root:@localhost/test1')
> legacy_db.define_table('auth_user',
>     Field('id','integer'),
>     Field('first_name','string'),
>     Field('last_name','string'),
>     Field('email','string'),
>     Field('username','string'),
>     Field('password','string'),
>     Field('registration_key','string'),
>     Field('reset_password_key','string'),
>     Field('registration_id','string'),
>     Field('is_active','string'),
>     Field('created_on','datetime'),
>     Field('created_by','integer'),
>     Field('modified_on','datetime'),
>     Field('modified_by','integer'),
>     Field('created_from','string'),
>     Field('modified_from','string'),
>     migrate=False)
>
> *question:*
> - why the result is different in define_table (sqlite and mysql)? can we 
> define the table without defining it's own field like sqlite result ?
> - there are an error traceback with the dal constructor, seems must have 
> migrate=False or anything, even try at the define table add the migrate 
> parameter still meet the error traceback
> *e.g.1*
> legacy_db = DAL('sqlite://mutualfunds.sqlite')
>
> *error traceback:*
> Traceback (most recent call last):
>   File "/Users/MacBookPro/project/python/web2py/gluon/restricted.py", line 
> 219, in restricted
>     exec(ccode, environment)
>   File 
> "/Users/MacBookPro/project/python/web2py/applications/test/models/db.py", 
> line 75, in <module>
>     auth.define_tables(username=False, signature=False)
>   File "/Users/MacBookPro/project/python/web2py/gluon/tools.py", line 
> 2216, in define_tables
>     super(Auth, self).define_tables(username, signature, migrate, 
> fake_migrate)._table_signature_list
>   File "/Users/MacBookPro/project/python/web2py/gluon/authapi.py", line 
> 350, in define_tables
>     format='%(first_name)s %(last_name)s (%(id)s)'))
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/base.py", 
> line 586, in define_table
>     table = self.lazy_define_table(tablename, *fields, **args)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/base.py", 
> line 620, in lazy_define_table
>     polymodel=polymodel)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/adapters/base.py",
>  
> line 797, in create_table
>     return self.migrator.create_table(*args, **kwargs)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/migrator.py",
>  
> line 277, in create_table
>     self.adapter.create_sequence_and_triggers(query, table)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/adapters/base.py",
>  
> line 880, in create_sequence_and_triggers
>     self.execute(query)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/adapters/__init__.py",
>  
> line 67, in wrap
>     return f(*args, **kwargs)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/adapters/base.py",
>  
> line 412, in execute
>     rv = self.cursor.execute(command, *args[1:], **kwargs)
> OperationalError: table "auth_user" already exists
>
> *e.g.2*
> legacy_db = DAL('sqlite://mutualfunds.sqlite', migrate = False, 
> fake_migrate = False, migrate_enabled = False, fake_migrate_all = False)
>
> *error traceback:*
> Traceback (most recent call last):
>   File "/Users/MacBookPro/project/python/web2py/gluon/restricted.py", line 
> 219, in restricted
>     exec(ccode, environment)
>   File 
> "/Users/MacBookPro/project/python/web2py/applications/test/models/table.py", 
> line 3, in <module>
>     migrate = True, fake_migrate = True, migrate_enabled = True, 
> fake_migrate_all = True)
>   File 
> "/Users/MacBookPro/project/python/web2py/gluon/packages/dal/pydal/base.py", 
> line 571, in define_table
>     raise SyntaxError('table already defined: %s' % tablename)
> SyntaxError: table already defined: auth_user
>
> *conclusion:*
> still can't work with legacy database with the extract database models 
> python script even the database is created by another web2py app.
>
> any hints?
>
> thx and best regards,
> stifan
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to