zoukankan      html  css  js  c++  java
  • 基于firebird的数据转存

    功能:使用于相同的表从一个数据库转存到另一数据库;

    方式:直连fdb并加载django,引用django的model完成;

    原因:1、select * from *** 返回的数有很多None,直接inset into *** values ()会报错;

               2、设计字段包含关键字,select和insert,update都需要加”“,容易忽略;

               3、有几个字段是blob的,消息体超大,直接插入会报错,使用django的model不但简单而且避免了一些因粗心犯的错误,代码也更易读。

    # !/usr/bin/env python
    # -*- coding: utf-8 -*-
    import fdb
    import os
    import django
    
    def excute_sql(sql):
        con = fdb.connect(dsn='ip:path/***.FDB', user='your user name', password='your pwd')
        try:
            cur = con.cursor()
            cur.execute(sql)
            return quert_list
        except Exception as e:
            print('execute sql %s error, msg is %s' % (sql, e.message))
            print ('execute sql %s error, msg is %s' % (sql, e.message))
            raise Exception('execute sql %s error, msg is %s' % (sql, e.message))
        finally:
            con.close()
    
    
    def query(model):
        column_list = ['"%s"' % f.column for f in model._meta.fields]
        field_list = [f.name for f in model._meta.fields]
        query_field = ','.join(column_list)
        sql = 'select %s from %s' % (query_field, model._meta.db_table)
        data_list = excute_sql(sql)
        result = []
        for data in data_list:
            data_map = collections.OrderedDict()
            for index in xrange(0, len(data)):
                if data[index] is not None:
                    data_map[field_list[index]] = data[index]
            result.append(data_map)
        return result
        
    def insert(model):
        data_list = query_from_vnfm(model)
        model.objects.all().delete()
        for data in data_list:
            NfInstModel.objects.create(**nf_data)
            
    def init():
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "***.settings")
        django.setup()
        
    if __name__ == '__main__':
        init()
        from *** import ***
        insert(***)
  • 相关阅读:
    最全的 Twitter Bootstrap 开发资源清单
    jQuery布局插件UI Layout简介及使用方法
    SQLcode错误代码汇总和sqlstate=37000的解决方案
    JQUERY插件学习之jQuery UI
    如何判断/检查一个集合(List<string>)中是否有重复的元素
    反射原理及简介
    C# 获取文件夹下的所有文件的文件名
    委托编程指南
    模块封装与程序集
    Redis Lock
  • 原文地址:https://www.cnblogs.com/small-office/p/9430509.html
Copyright © 2011-2022 走看看