データベースへのPythonのインポートエクセル

データベースへのPythonのインポートエクセル

また、偉大に助けを学ぶための簡単なスクリプト言語、システムの運用・保守作業を扱う、などのPython。CentOSのパッケージ管理ツールは、Python経由で知るために。

実際の運用では、ユーザーが提供する基本的なデータは、多くの場合、Excelを仕上げに基づいており、データベースにExcelのデータは非常に一般的な要件です。この記事では、のpython3ベースの読みExcelデータを達成し、データベースにインポートする方法について説明します。

この手順では、PIPでインストールすることができる2つのパッケージに適用されます

pip install openpyxl pyodbc

プログラム構造図に示すように。

入口モジュールは、実行によって実行しました。それはSqlHelperとExcelHelperを依存しています。データベースの読み取りを動作させるための責任SqlHelper、ExcelHelper責任Excelは、操作をお読みください。Excelファイルを読み込むことでExcelHelperは、配列のモデルタイプとして解析しました。データベース操作を実行するための配列を読み取ることでモデルSqlHelper。

run.py入口モジュールのコードは次の通りであります:

#通过from ... import引入其他模块
from excelHelper import ExcelHelper
from sqlHelper import SqlHelper

def run():
    importxls('xls/xxx.xlsx')

def importxls(path):
    # 读取excel文件,获取model列表
    excelHelper = ExcelHelper(path,'Sheet1')
    modellist = excelHelper.readExcelForModels()
    # 通过sqlHelper传入读取到的model列表插入数据库
    sqlHelper = SqlHelper()
    sqlHelper.insertModels(modellist)

#执行
run()

model.pyモデルは、取得したExcelデータを読んだ後、私たちのニーズを定義するためのデータモデルです。カスタム彼らはライン上で必要なフィールド:

class Model:
    def __init__(self,code,name):
        self.code = code
        self.name = name
    
    #通过定义str,帮助在调试时,通过print()函数打印数据
    def __str__(self):
        str = "code:%s  name:%s  tenantId:%s  targetRemark1:%s" % (self.code, self.name) 
        return str

excelHelper.pyは、Excelのヘルプクラスをお読みください。

#引入openpyxl以读取excel文件
import openpyxl
#引入模型定义
from model import Model

class ExcelHelper:
    def __init__(self, path, sheetname):
        #列数定义,Index从1开始计算
        self.codeIndex = 2
        self.nameIndex = 3
        #读取workbook。data_only=True,以避免Excel公式值读取的问题
        wb = openpyxl.load_workbook(path, data_only=True)
        #读取标签
        self.sheet = wb[sheetname]
        #读取excel中的行数
        self.max_row = self.sheet.max_row

    def readExcelForModels(self):
        list = []
        #循环读取excel,行数从1开始计算
        for rowIndex in range(2, self.max_row):
            cellCode = self.sheet.cell(row=rowIndex, column=self.codeIndex).value
            if(cellCode == None):
                continue
            #读取所需数据
            code = self.sheet.cell(row=rowIndex, column=self.codeIndex).value
            name = self.sheet.cell(row=rowIndex, column=self.nameIndex).value
            #设置model
            data = Model(code, name) 
            #插入数组
            list.append(data)
        return list

appsettings.jsonデータベース接続文字列ODBCを定義します

{
  "ConnectionStrings": {
    "Default": "DRIVER={SQL SERVER};Server=xx; Database=xx; UID=xx;PWD=xx;"
  }
}

configReader.pyは、データベース接続文字列をお読みください。

import json

def getConnectString(name):
    config = open("appsettings.json")
    setting = json.load(config)
    connectstring = setting['ConnectionStrings'][name]
    return connectstring

sqlHelper.pyデータベース操作のヘルプクラス:

#sqlHelper.py
#pyodbc通过odbc读取数据库
import pyodbc
#configReader来读取appsettings.json
import configReader
#textwrap用于处理sql字符串
import textwrap

class SqlHelper:
    def __init__(self):
        #获取数据库连接字符串
        conn_info = configReader.getConnectString('Default')
        #连接数据库
        self.mssql_conn = pyodbc.connect(conn_info)
        #获取游标
        self.mssql_cur = self.mssql_conn.cursor()
    
    #校验字段是否为空
    def isEmpty(self, v):
        if(v == None or v.isspace()):
            return True
        else:
            return False
    #插入数据
    def insertModels(self, modelList):
        for model in modelList:
            if(self.isEmpty(item.code) or self.isEmpty(item.name)):
                continue
            #通过textwrap构建sql字符串,?代表预留参数位
            sql = textwrap.dedent("""
            INSERT INTO [dbo].[Model]
            ([Code]
            ,[Name]
            )
            VALUES
            (?
            ,?
            )
            """)
            #循环插入数据
            self.mssql_cur.execute(sql, model.code, model.name)
        #数据库事务提交
        self.mssql_conn.commit()
    
    #展示如何进行数据库查询,假设存在一个可能为null的字段tennantId
    def getIdByCode(self, code, tennantId):
        #由于tennantId可能为null,因此查询语句会有is null的差别
        if(tennantId == None):
            #通过fetchval()来读取数据
            return self.mssql_cur.execute("select Id from Model where TenantId is null and Code = ?", code).fetchval()
        else:
            return self.mssql_cur.execute("select Id from Model where TenantId = ? and Code = ?", tennantId, code).fetchval()

PythonのインポートExcelのデータベース操作は、一般的に、それは非常に簡単です、行いました。特に、データベースの操作のためのpyodbcは、デフォルトトランザクションのコミットを提供し、修正操作のための良いパッケージを持っています。そして、道のパラメータを置き換えることにより、入力パラメータをサポートしています。Pythonは確かに言語を使用して容易である、他の言語は、弱い効率をプログラミングの多くを同様のことを行います。

このヘルプにあなたを願っています。

おすすめ

転載: www.cnblogs.com/wswind/p/12501491.html
おすすめ