绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
基于firebird的数据转存
2022-05-11 15:37:20

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

方式:直连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(***)
复制代码
分享好友

分享这个小栈给你的朋友们,一起进步吧。

Firebird
创建时间:2022-03-17 14:38:16
Firebird
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • itt0918
    专家
戳我,来吐槽~