ryotankの備考録日記

趣味の電子工作についての備考録などなど

アリンコス部品管理その24

今回はデータベースに情報が登録出来るかをテストする

#2022-3-28作成

#ファイル名:データベースの実装_アリンコス部品管理
#部品管理テーブルと内訳テーブルの関係図をもとに作成している
#例外が発生しました: RuntimeError:Failed to create exception 2022-4-5 mariadb_connection = mariadb.connectが原因に
#mysql.connectorでtypeErrorが発生エラー内容[引数の数が違う] 2022-3-30

from msilib.schema import Error
import  mariadb  
import sys

# データベースへの接続とカーソルの生成
try:
    conn = mariadb.connect(
    host='localhost',
    user='root',
    passwd='******',
    port=33**,
    database='arincos_parts_test')  #'arincos_parts_test'とする

except mariadb.Error as er:
    print(f"Error Connecting to MariaDB Platform: {er}")  #MariaDB プラットフォームへの接続エラー
    sys.exit(1)    #プログラムをエラー終了

#Get Cursor    
cur = conn.cursor()

#外部キー制約の有効化(mariaDB)
#cur.execute("PRAGMA foreign_keys = 1")


# 既にデータベースが登録されている場合は、ddlの発行でエラーが出るのでexceptブロックで回避する
try:
    #item_alincos(内訳)テーブルの定義
    ddl ="""
    CREATE TABLE item_alincos
    (
        quantity_possessed INTEGER PRIMARY KEY,
        consumed_quantity INTEGER NOT NULL,
        date_consumed DATE NOT NULL
    );
    """

    #SQL発行
    cur.execute(ddl)

    #alincos_parts_data(部品管理)テーブルの定義
    ddl = """
    CREATE TABLE alincos_parts_data
    (
        product_name VARCHAR(400) PRIMARY KEY,
        model_number CHAR(20) NOT NULL,
        quantity_possessed INTEGER NOT NULL,
        FOREIGN KEY(quantity_possessed) REFERENCES item_alincos(quantity_possessed)
    );
    """

    #SQL発行
    cur.execute(ddl)

    #item_alincos(内訳)テーブル登録のテスト
    cur.execute("INSERT INTO item_alincos VALUES(6, 2, '2020-1-6');")
    cur.execute("INSERT INTO item_alincos VALUES(127,14,'2020-5-8');")
    cur.execute("INSERT INTO item_alincos VALUES(100,7,'2021-9-4');")
    cur.execute("COMMIT;")


    #alincos_parts_data(部品管理)テーブル登録のテスト
    cur.execute("""
        INSERT INTO alincos_parts_data(product_name,model_number,quantity_possessed)
        VALUES('電子ブザー','HDB06LPFN',6);
    """)
    cur.execute("COMMIT;")

    #alincos_parts_data(部品管理)テーブル登録のテスト(変数を使った登録)
    product_name = '電子ブザー'
    model_number = 'HDB06LPFN'
    quantity_possessed = 6

    cur.execute("""
        INSERT INTO alincos_parts_data()
        VALUES();""".format(product_name,model_number,quantity_possessed)
    )
    cur.execute("COMMIT;")

except:
    pass

#最後に登録されているデータの表示をして確認する
#item_alincosテーブルの表示
result = cur.execute("SELECT * FROM item_alincos")
for row in result:
    print(row)


#alincos_parts_dataテーブルの表示
result = cur.execute("SELECT * FROM alincos_parts_data")
for row in result:
    print(row)


#alincos_parts_dataテーブルとitem_alincosテーブルを結合し表示する
result = cur.execute("""
    SELECT a.product_name, i.consumed_possessed, a.model_number, i.date_consumed
    FROM alincos_parts_data as a, item_alincos as i
        WHERE a.quantity_possessed = i.quantity_possessed;
""")
for row in result:
    print(row)


cur.commit()

    # 接続を閉じる
cur.close()

だが、上手く情報を登録出来ないので、次回あたりは、失敗した例を紹介する