Python は Excel ファイルを読み取り、データベースに挿入します。

 1. 需要の背景

        最近、プロジェクトの実践中に問題が発生しました。Navicat を使用して PostgreSQL データベースにデータをインポートするときに、時刻形式のフィールドの時刻値が変更され、一部のデータの時刻が正しくないことが判明したため、データは手動でデータベースにインポートされ、エラーが報告されました。この問題を解決するために、Excel ファイルを読み取り、データをターゲット データベースに 1 行ずつ挿入して時間データの精度を確保する Python コードを作成することにしました。

2. 練習プロセス

  1. Excel ファイルの操作や PostgreSQL データベースへの接続に必要な Python ライブラリ ( や など) がインストールされていることを確認してpandasくださいpsycopg2

  2. インポートする Excel ファイルを準備し、時刻フィールドが正しい形式であり、インポートするデータが含まれていることを確認します。

  3. データのインポート操作を実行するための Python スクリプトを作成します。

3. コードの練習

import psycopg2
import pandas as pd

# 连接数据库
conn = psycopg2.connect(database='jiangyu_01', user='bigdata', password='postgres', host='192.168.22.168', port='1234')
cur = conn.cursor()

# 读取Excel文件并更新数据库中的数据
def synonym():
    data_xls = pd.read_excel('new.xlsx', usecols=[0, 5], Sheetname='news')  # 读取Excel文件中的两列数据,Sheet名为'news'
    print(len(data_xls))
    for data in data_xls.values:
        sql = """UPDATE public.jiaozheng_dataxx SET upload_time='{}' WHERE id={}""".format(data[1], data[0])
        cur.execute(sql)
        conn.commit()

def get_dataset():
    # 读取数据库中的数据示例
    conn = psycopg2.connect(database='sanyu_01', user='tatt', password='postgres', host='192.168.91.13', port='5432')
    cur = conn.cursor()
    cur.execute("SELECT * FROM public.jiaozheng_dingweixx LIMIT 1")
    data = cur.fetchall()
    print(data)

if __name__ == '__main__':
    synonym()  # 执行更新操作

        上記のコードは、psycopg2 ライブラリを通じて PostgreSQL データベースに接続し、Excel ファイル内のデータを読み取り、データベースの指定されたテーブル内のフィールドに行ごとにデータを更新する例jiaozheng_dataxxですupload_time

        コード内の関数は、Excel ファイルの「ニュース」シート内の 2 列のデータをsynonym()読み取り'new.xlsx'、SQL 更新ステートメントを使用してデータベース内のデータを行ごとに更新するために使用されます。get_dataset()関数は、データベースからデータを読み取る方法を示すために使用されます。

        実際のデータベースやデータ更新のニーズに合わせて、データベース接続パラメータ、Excel ファイル パス、テーブル名とフィールド名、その他の情報を独自のニーズに応じて変更できます。同時に、必要に応じて例外処理やロギングなどの機能を追加し、コードを改善することもできます。

        このようにして、ファイルを読み取ってデータベースに挿入する方法が実現され、現在の Navicat ツールを使用したデータの手動インポートが失敗するという問題が一時的に解決されます。

おすすめ

転載: blog.csdn.net/weixin_40547993/article/details/131741850