pythonによるExcelのデータベースへの適応的インポート
2022-02-17 05:39:54
python データベースにエクセルをインポートする
関数は以下の通りです。
- エクセルの各シートを自動的にデータベースに取り込み、シート名をテーブル名とするテーブルをデータベースに作成します。
- 各シートのデータをデータベースの対応するテーブルに追加します。デフォルトでは、最初の行がテーブルのリスト名で、他の行がデータです。
- データ内に存在するテーブルファイル名を検索する。
- データベースから、データがあるというテーブルを探す。
- データベース内のテーブルにデータを追加する。
- アダプティブテーブルの作成。
概要
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
関連
-
[解決済み] 'instancemethod' オブジェクトは、クラス変数で '__getitem__' という属性を持たない
-
[解決済み] Windows での Python ライブラリのインストールに関する問題点 : CondaHTTPErrorです。HTTP 000 CONNECTION FAILED for url <https://conda.anaconda.org/anaconda/win-64
-
[解決済み] Python3 で ** や pow() でサポートされていないオペランド型: 'str' と 'int' [重複].
-
[解決済み] Macでpyenv(homebrewでインストール)をアンインストールする方法
-
[解決済み] コロン期待値エラー
-
[解決済み] python3.2用pycompile。
-
[解決済み] spyder - メモリから変数と一緒に変数エクスプローラをクリアします。
-
[解決済み] Python 3でxreadlines()の代わりになるものは何ですか?
-
PIPはランチャーでFatal errorが発生します。
-
python-TypeError: write() の引数は str でなければならず、numpy.float64 であってはならない。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[Python] TypeError: ハッシュ化できない型: 'numpy.ndarray'
-
Debug Road-13: Python: pandas IndexError: single positional indexer is out-of-bounds
-
[解決済み] numpy/scipy/ipython:Failed to interpret a file as a pickle
-
[解決済み] help(foo)のように、Pythonのメソッドシグネチャにあるフォワードスラッシュ「/」の意味を教えてください。重複] [重複] [重複] [重複
-
[解決済み] Pycharmの終了コード0
-
[解決済み] EnvironmentErrorのため、パッケージをインストールできませんでした。[Errno 13] です。
-
[解決済み] このコードでnumpy.c_はどのように使用されていますか?[クローズド]です。
-
[解決済み] PyMongo 3でServerSelectionTimeoutErrorが発生するのはなぜですか?
-
[解決済み] Python インデックスエラー value not in list...on .index(value)