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.