如何将现有的MySQL数据库导入到web2py中?

我正在开发一个项目,该项目要求我导入一个已经存在的数据库并在Web2py中使用它的数据。 通过将DAL URI更改为:我能够链接到数据库

db = DAL('mysql://root:password@localhost/database_name',pool_size=1,check_reserved=['all'])

它创建了我的所有web2py定义的字段,并且可以与它们进行交互,但我无法访问之前已存在于数据库中的任何数据。 我尝试运行web2py脚本extract_mysql_models.py,这是支持导入数据的方式,但是我返回的是:

legacy_db = DAL('mysql://root:password@localhost/localhost/database_name')

它只是创建另一个dal对象。 尝试通过legacy_db访问任何内容只会给出与尝试通过db获取内容相同的选项。 有没有人做过这个? 有小费吗?


我有同样的问题。 我就是这样做的。

  • 从旧数据库转储它

    mysqldump --user USERNAME --password=PASSWORD dbname > backup.sql
    
  • 将备份文件导入到新的mysql服务器

    mysql -h mysql.server -u USERNAME -p 'DBNAME' < backup.sql
    
  • 添加将DAL连接添加到新的mysql服务器。

  • 它与旧的db相同。 我遇到的问题是从pythonany设置数据库UI创建了一个与我的旧数据库不相同的数据库。 所以如果我没有记错,你也可以让web2py首先创建数据库表,然后最后执行第2步。 多数民众赞成我是如何做反正...如果我记得是对的;)希望它可以帮助你。 干杯


    我有同样的问题,并且在appadmin.py中创建了以下函数来自动创建表定义

    get_db():
        import re
        datyp = dict(
        bit='boolean', tinyint='boolean',
        smallint='integer', mediumint='integer', int='integer', bigint='bigint',
        decimal='decimal', double='double', float='double',
        char='password', varchar='string',
        longtext='list:string', mediumtext='text', text='text', tinytext='text',
        enum='json',
        timestamp='datetime', datetime='datetime', date='date', time='time',
        year='integer',
        tinyblob='blob', blob='blob', mediumblob='blob', longblob='blob',
        binary='blob', varbinary='blob'
        # upload    reference    list:string    list:integer    list:reference
        # json    big-id    big-reference
        )
        tdat = []
        tbls = [t[0] for t in db.executesql('SHOW TABLES;')]
        for tbl in tbls:
            cols = [k.strip() for k in db.executesql(
                'SHOW CREATE TABLE `' + tbl + '`;')[0][1].split('n')]
            fname = OrderedDict()
            for col in cols:
                if col.startswith('KEY'):
                    continue
                coln = re.findall('`([^`]*)`', col)
                if (col.startswith('`')):
                    st = col.index(' ') + 1
                    typ = col[st:col.index('(' if '(' in col else
                            (' ' if ' ' in col[st:] else ','), st)]
                    ft = datyp[typ]
                    if (ft == 'string'):
                        st = col.index('(', st) + 1
                        ft = "'" + ft + "', length=" + col[st:col.index(')', st)]
                    elif (ft == 'decimal'):
                        st = col.index('(', st)
                        ft = "'" + ft + col[st:col.index(')', st) + 1] + "'"
                    else:
                        ft = "'" + ft + "'"
                    if (not "DEFAULT NULL" in col) and ("'" in col):
                        st = col.index("DEFAULT '") + len("DEFAULT '")
                        ft += ', default=' + col[st:col.index("'", st)]
                    if 'NOT NULL' in col:
                        ft += ', required=True'
                    fname.update({coln[0]: ft})
                    continue
                if (len(coln) == 2 and col.startswith('UNIQUE KEY')):
                    fname[coln[1]] += ', unique=True'
                    continue
                if (len(coln) == 4):
                    sval = fname[coln[1]]
                    if 'integer' in sval:
                        sval = sval.replace('integer', 'reference db.' + coln[2])
                    elif 'bigint' in sval:
                        sval = sval.replace('bigint',
                                            'big-reference db.' + coln[2])
                    fname[coln[1]] = sval
                    if ('ON DELETE ' in col) and  (not 'CASCADE' in col):
                        st = col.index("ON DELETE ") + len("ON DELETE ")
                        sval = ', ondelete="' + col[st:col.index(" ON", st)] + '"'
                        fname[coln[1]] += sval
            colstr = ["db.define_table('" + tbl + "',"]
            for key, val in fname.items():
                if (key == 'id'):
                    continue
                colstr.append("Field('" + key + "', " + val + "),")
            colstr.append('migrate=False)')
            tdat.append(colstr)
        response.view = 'default/index.html'
        return dict(msg=tdat)
    
    链接地址: http://www.djcxy.com/p/22753.html

    上一篇: How to import existing MySQL database into web2py?

    下一篇: get error when running web2py "image blog" example