データベースへの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は確かに言語を使用して容易である、他の言語は、弱い効率をプログラミングの多くを同様のことを行います。
このヘルプにあなたを願っています。