Please how can I use the script? I mean, where will I save the script? 
anywhere online where I can just download it instead of copy & paste?

On Wednesday, 15 July 2009 00:09:20 UTC+1, Boriel wrote:
>
> Hi,
>
> I'm rather new to web2py, but I think this script might be helpful to 
> others.
> I've created a little python script that will automatically dump on
> the screen the creation of an already existing mysql database to be
> ready to use with web2py.
>
> So, for example, if you have already created a MySQL db called
> "mybooks" and want to import it to web2py, just type:
> mysqltoweb2py.py mybooks <user> <passwd>
>
> And it will dump on the screen the orders needed to be copied in the db.py 
> file.
> This is the script:
>
> ============================= 8< == 8< == 8< ==============================
> #!/usr/bin/env python
> # -*- coding: utf-8 -*-
> '''
>     mysqltoweb2py --> Import an already existing MySQL Database
>         into web2py.
>
>     Usage:
>         mysqltoweb2py.py <database> <userid> <passwd>
> '''
>
> import sys
> import re
> import MySQLdb
>
> reFieldType = re.compile(r'([a-zA-Z]+)([(]\d+[)])?')
> reLetter = re.compile('[a-zA-Z]')
>
>
> datab = sys.argv[1]
> user = sys.argv[2]
> passwd = sys.argv[3]
>
> db=MySQLdb.connect(host='localhost',user=user, passwd = passwd, db = datab)
>
>
> def error_msg(msg):
>     ''' This could be implemented as an exception
>     '''
>     sys.stderr.write("%s\n" % msg)
>     sys.exit(1)
>
>
> def output_table(table):
>     cursor=db.cursor()
>     cursor.execute('show columns from `%s`' % table)
>
>     print "db.define_table('%s'," % table
>     # Extract table fields
>     for field in cursor.fetchall():
>         if field[0] == 'id':
>             continue # id field ignored
>
>         if not reLetter.match(field[0][0]):
>             error_msg("Error: field name [%s] in table [%s] does not
> begin with a letter" % (field[0], table))
>
>         ftype = reFieldType.match(field[1])
>         if not ftype:
>             error_msg("Error: could not parse column type")
>
>         _type, _len = tuple(ftype.groups())
>         if _type == 'varchar':
>             _type = 'string'
>         elif _type in ('int', 'tinyint'):
>             _type = 'integer'
>
>         print "\tSQLField('%s'," % field[0],
>         print "type = '%s'" % _type,
>         if _len is not None: # Has a length?
>             print ", length = %i" % int(_len[1:-1]),
>         print "),"
>
>     print "\tmigrate = False)"
>
>
> cursor = db.cursor()
> cursor.execute('show tables')
> for table in cursor.fetchall():
>     print
>     output_table(table[0])
> =================== 8< == 8< == 8< ==============================
>
> Many things to be done:
>
> 1) Fieldnames starting with "_" are not allowed by web2py (but MySQL
> allows it). An error is printed
> 2) Some field types do not exist in web2py (e.g. tinyint) so an
> equivalent is used.
>
> Regards,
> J.
>
> -- 
> Boriel      http://www.boriel.com
>
>

-- 
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 web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to