アプリ版:「スタンプのみでお礼する」機能のリリースについて

2022/4/28
PCにpythonインストールし本とネットで勉強始め、データベースが扱えるというので
sqlightでDB作成、テーブル作成、商品マスタと販売テーブルをリンクして
品名別の売り上げと総合計出すところまで来ました。
クエリー文が桁位置揃えなど見やすい形に作っても機能することに感動、これなら見やすい。
これを変数に代入してクエリー実行できる。ハッピー!
出力は、今のところ品種別タプルです。
勉強中なのでごく簡単なモデル。品種数3つのマスター(ID 品名 単価、売り上げは品種IDと個数だけ。
それでも join sum 使って売り上げ表や、品種別売り上げ合計数・売上合計金額を出力できました。
MicrosoftのDBソフトのaccessでは、
作成したクエリーを次のクエリー作成の材料(テーブルとクエリー同等)に使え、
ブロック構造的に目的のプログラムができ大変便利に使えています。
python-sqlightでは、そのような使い方はできないのでしょうか?

もしできなければ、クエリー結果を一旦それ用のテーブルのデータ全削除し、データとして入れ込んでテーブルを作り、
sqlightの機能としてのクエリー作成実行し、不要になったらデータやDBを削除する操作が必要に。

どなたか、ご存じでしたらご教示ください。

質問者からの補足コメント

  • HAPPY

    教えてgoo!で、回答者から教えてもらった
    クエリーで作成する仮想テーブル?であるviewを使えば、
    accessでできるクエリーをテーブル同様に、次のクエリーの材料に使えることが分かりました。
    ただ、pythonとsqlightで入門編のいろいろな本やネット解説では、viewに触れているものがほとんど見当たりません。
    accessでの経験では、クエリー結果を次のクエリー使えないと、実質使えないので、この機能は重要だと思っていました。
    python上のsqlightで、これができることが分かったので、十分に「使える」と思います。

      補足日時:2022/04/29 12:36

A 回答 (1件)

    • good
    • 1
この回答へのお礼

##ご教示のサイトで、クエリー結果をview tabelとして再利用できるようになりました。。
##db接続解除後にviewを削除するCREATE TEMPORARY VIEWは便利。
##この場合、sqlite_masterで type = 'view'view では検索できない
##使わないと次回作成済みでエラー
##DROP VIEW使わなくても、次回作成できる。ただ、利用できない。
作ったpythonは下記です。

import sqlite3
dbname = "test.db" #対象DBを宣言
conn = sqlite3.connect(dbname)
cur = conn.cursor() #sql文を実行する窓口cursor

##クエリー結果を臨時使用のtemp viewテーブル view_tにする
cur.execute("""CREATE TEMPORARY VIEW view_t as SELECT * FROM hinmei_master; """)
#注: TEMPORARY指定しないとviewが実テーブル?登録され、再作成するとエラーに

##dbの中にできたviewの名前とviewを作成したsql文を表示する
cur.execute("""select name, sql from sqlite_master where type = 'view';""")
for row in cur.fetchall():
print(row)
print("CREATE TEMPORARY VIEWの場合は、sqlite_masterのviewには存在しない")

##できたview tableの内容を表示する
cur.execute("""SELECT * FROM view_t; """)
for row in cur.fetchall():
print(row)


#cur.execute("DROP VIEW view_t;")

conn.commit() #データベースに行った変更を確定
conn.close() #データベース接続を切断し閉じる

お礼日時:2022/04/29 10:45

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!