1. ホーム
  2. python

pythonによるExcelのデータベースへの適応的インポート

2022-02-17 05:39:54
<パス

python データベースにエクセルをインポートする

関数は以下の通りです。

  1. エクセルの各シートを自動的にデータベースに取り込み、シート名をテーブル名とするテーブルをデータベースに作成します。
  2. 各シートのデータをデータベースの対応するテーブルに追加します。デフォルトでは、最初の行がテーブルのリスト名で、他の行がデータです。
  3. データ内に存在するテーブルファイル名を検索する。
  4. データベースから、データがあるというテーブルを探す。
  5. データベース内のテーブルにデータを追加する。
  6. アダプティブテーブルの作成。

概要

python sqliteを使ったテーブルの作成、テーブルの数と名前の表示、テーブルのリスト名の表示、テーブルの内容の表示、テーブルのデータ挿入。

コードは以下の通りです。

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
import xlrd
import sqlite3
import pprint


# Connect to the database
def connect_db(file_path):
    conn = sqlite3.connect(file_path)
    return conn


# Get the names of all the tables in the database
def get_tables(conn):
    sql = "SELECT * FROM sys.Tables"
    cursor = conn.cursor()
    # Get the table name
    cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
    tables = [tuple[0] for tuple in cursor.fetchall()]
    print(tables)
    return tables


# Get the table header information, column names of table_name in the database
def get_desc(conn, table_name):
    cursor = conn.cursor()
    sql1 = "select * from {}".format(table_name)
    cursor.execute(sql1)
    col_name_list = [tuple[0] for tuple in cursor.description]
    sql = "("
    for index in col_name_list:
        sql += index + ","
    ret = sql[:-1] + "")"
    return ret


# Show all elements of table_name in the database
def show_table(conn, table_name):
    cursor = conn.cursor()
    sql = "select * from {}".format(table_name)
    cursor.execute(sql)
    pprint.pprint(cursor.fetchall())


# Create the database, table_items is the column name in table_name, i.e. the table header information
def create_table(conn, table_name, table_items):
    sqlline = "create table {} (".format(table_name)
    for i in table_items:
        sqlline += i + " text,"
    sql_line = sqlline[:-1] + "")"
    cursor = conn.cursor()
    cursor.execute(sql_line)
    conn.commit()


# database file insert, content_items is the data information to be inserted into the table table_name
def insert_data(conn, table_name, content_items):
    sql = ''' insert into {} 
    {}
    values ('''.format(table_name, get_desc(conn, table_name))
    for index in content_items:
        sql += str(index) + ","
    ret = sql[:-1] + ")"
    cursor = conn.cursor()
    cursor.execute(ret)
    conn.commit()


#find table_head = table_content in table_name table in the database
def find_data(conn, table_name, table_head, table_content):
    sql = "select {table_head} from {table_name} where {table_head} = {table_content}".format(table_head=table_head,
                                                                                              table_name=table_name,
                                                                                              table_content=table_content)
    cursor = conn.cursor()
    cursor.execute(sql)
    pprint.pprint(cursor.fetchone())


# read the exel table and create the table in the database
def read_exel(file_path, conn):
    if not file_path.endswith("xlsx"):
        print("path_wrong")
    # Get a Book object
    book = xlrd.open_workbook(file_path)
    # Get a list of sheets objects
    sheets = book.sheets()
    for sheet in sheets:
        sheet_name = sheet.name
        # Get the number of rows of the sheet
        rows = sheet.get_rows()
        for index, row in enumerate(rows):
            table_items = [tuple.value for tuple in row]
            print(table_items)
            if index == 0:
                # The default first row is the table header information, create the table in the database
                create_table(conn, sheet_name, list(table_items))
            else:
                # Insert each row of the sub-sheet into the database
                insert_data(conn, sheet_name, table_items)
        show_table(conn, sheet_name)


def main():
    # Use a breakpoint in the code line below to debug your script.
    conn = connect_db("test.db")
    table = get_tables(conn)
    find_data(conn,table[0],"test",2.0)
    show_table(conn,table[0])
    # file_path = "test.xlsx"
    # read_exel(file_path, conn[0])
    conn.close()


# Press the green button in the gutter to run the script.
if __name__ == '__main__':
    main()



ツールを使う

xlrd
python install xlrd ノート、直接使用する場合。

pip install xlrd


5月の出会い、Excelシートを開くのに失敗

xlrd のエラーを回避する最も簡単な方法は、.NET Framework としてインストールすることです。

pip install pip install xlrd==1.2.0