ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python 连接 db2 数据库

2022-01-25 09:36:33  阅读:246  来源: 互联网

标签:engine sheet python 数据库 tablename date sql print db2


import pandas as pd
from sqlalchemy import create_engine
# pip install xlrd==1.2.0
import xlrd
import time


def create_database_engine():
    connection_string = 'db2+ibm_db://{username}:{password}@{host}:{port}/{database}'.format(
        username='db2inst1',
        password='db2inst1',
        host='192.168.0.100',
        port='60000',
        database='testdb',
    )
    return create_engine(connection_string)


def readsql(engine, tablename):
    try:
        sql = f'select * from {tablename} order by int(khh) fetch first 100 rows only'
        x = pd.read_sql(sql, engine)
    except Exception as e:
        print(e)
    return x


def delsql(engine, tablename):
    try:
        sql = f'delete from {tablename}'
        pd.read_sql(sql, engine)
    except Exception as e:
        print(e)


def insertsql(engine, tablename, date):
    sql = f"insert into {tablename} values " + str(date[0])
    if len(date) == 1:
        pass
    else:
        for i in range(1, len(date)):
            sql = sql + ',' + str(date[i])
    try:
        pd.read_sql(sql, engine)
    except Exception as e:
        # print(e)
        pass


def read_excel(path):
    wb = xlrd.open_workbook(path)
    sheet_name = wb.sheet_names()[0]
    # print(sheet_name)
    sheet = wb.sheet_by_name(sheet_name)
    # print(sheet.name, sheet.nrows, sheet.ncols)
    x = sheet.nrows
    date = []
    for i in range(1, x):
        y1 = sheet.cell_value(i, 0)
        y2 = str(sheet.cell_value(i, 1))[0:len(str(sheet.cell_value(i, 1)))-2]
        date.append((y1, y2))
    return date


if __name__ == '__main__':
    tablename = 'wcls.wpplsb'
    engine = create_database_engine()
    # print('请等待,正在读取数据库')
    # x = readsql(engine,tablename)
    # print(x)
    print('请等待,正在清空数据库临时表')
    delsql(engine, tablename)
    print('请等待,读取excel数据')
    # date = (('吴','123456'),('陈','654321'))
    date = read_excel('D:/1.xlsx')
    print('请等待,正在插入数据库')
    len_date = len(date)
    if len_date <= 10000:
        print(f'检测到数据条数为{len_date}小于1万条,直接导入')
        time1 = time.time()
        insertsql(engine, tablename, date)
        print(f'导入成功,耗时{round((time.time()-time1),2)}秒')
    else:
        print('检测到数据大于1万条,分批导入')
        time1 = time.time()
        for i in range(int(len_date / 10000)+1):
            date1 = date[i*10000:(i+1)*10000]
            insertsql(engine, tablename, date1)
            print(f'第{i+1}万条数据,耗时{round((time.time()-time1),2)}秒')
    print('请等待,正在重新读取数据库前一百条')
    x = readsql(engine, tablename)
    print(x)


标签:engine,sheet,python,数据库,tablename,date,sql,print,db2
来源: https://www.cnblogs.com/walives/p/15841683.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有