Hi Kevin,
I realize this is an old thread, but if you're still around, I just wanted
to confirm whether this script is capable of extracting and creating
foreign-keys with the "reference" keyword? I'm thinking not, since it did
not give me any after I ran it, but perhaps there's an option I'm not aware
of.
Thanks,
Peter
On Sunday, March 20, 2011 9:34:01 AM UTC-7, Kevin Ivarsen wrote:
>
> Hi folks,
>
> Today I made some enhancements to the
> web2py/scripts/extract_mysql_models.py script that converts existing MySQL
> tables into a DAL representation. I've attached a copy for anyone that
> might find it useful.
>
> The major changes are as follows:
> - I got rid of the dependencies on the external mysql and mysqldump
> executables and now use MySQLdb directly. This simplifies the parsing a lot
> and makes the tool a little more self-contained. (Linux users probably have
> the mysql command line tools installed, but Windows users may not -- at
> least not in the PATH)
> - If your id column does not have the default "id" name, the script looks
> for an AUTO INCREMENT column and marks that with type "id" instead.
> - If you have a COMMENT specified in your MySQL table, it is added as a
> Python comment to the Field line
> - You are no longer restricted to localhost - you can read tables form
> remote databases
> - There are several new command line options, such as:
> --dalname (specify the variable name used for the DAL; e.g. [var] =
> DAL(...); [var].define_table(...))
> --colcomments (add a comment to the end of each Field line showing the
> original column specification from CREATE TABLE... useful for nothing
> things like default values, original datatype, etc.)
> --commentalign (aligns comments to some number of spaces in the
> generated text)
> --notnull (detects NOT NULL and adds notnull=True to Field)
> --singlemigrate (use a single migrate=False in DAL() rather than in
> each define_table())
> --verbose (adds logging to stderr so that if it crashes, you have a
> chance of figuring out which table failed)
>
> You can see the full usage by running the script without any arguments.
>
>
> Example use:
>
> extract_mysql_models.py --user kevin --password secret --host
> example.com--database mywiki --dalname wikidb --colcomments --singlemigrate >
> mywiki.py
>
> Generated output (only looks pretty with fixed-width formatting!):
>
> wikidb = DAL('mysql://kevin:[email protected]/mywiki', migrate=False)
>
> wikidb.define_table('comment',
> Field('id', 'id'), # (`id` int(11) NOT NULL
> AUTO_INCREMENT,)
> Field('page_id', 'integer'), # (`page_id` int(11)
> DEFAULT NULL,)
> Field('body', 'text'), # (`body` longtext,)
> Field('created_on', 'datetime'), # (`created_on` datetime
> DEFAULT NULL,)
> Field('created_by', 'integer'), # (`created_by` int(11)
> DEFAULT NULL,)
> )
>
> wikidb.define_table('document',
> Field('id', 'id'), # (`id` int(11) NOT NULL
> AUTO_INCREMENT,)
> Field('page_id', 'integer'), # (`page_id` int(11)
> DEFAULT NULL,)
> Field('name', 'string'), # (`name` varchar(255)
> DEFAULT NULL,)
> Field('file', 'string'), # (`file` varchar(255)
> DEFAULT NULL,)
> Field('created_on', 'datetime'), # (`created_on` datetime
> DEFAULT NULL,)
> Field('created_by', 'integer'), # (`created_by` int(11)
> DEFAULT NULL,)
> )
>
> wikidb.define_table('page',
> Field('id', 'id'), # (`id` int(11) NOT NULL
> AUTO_INCREMENT,)
> Field('body', 'text'), # (`body` longtext,)
> Field('created_on', 'datetime'), # (`created_on` datetime
> DEFAULT NULL,)
> Field('created_by', 'integer'), # (`created_by` int(11)
> DEFAULT NULL,)
> Field('title', 'string'), # (`title` varchar(255)
> DEFAULT NULL,)
> )
>
>
> Massimo: feel free to integrate into the web2py source if you think it
> would be useful.
>
> Cheers,
> Kevin
>
--
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/groups/opt_out.