現在、初めてpythonとmysqlを使った開発を行なっています。スクレイピング結果を登録する際の一部でどのように書くのが良いのかについてお聞きしたいです。pythonに限ったことではないと思いますが、ご意見を頂ければ幸いです。
まず、以下のようなitemsのlistを持っているとします。
items
|id|user|num|day|num2|
|:--:|:--:|:--:|:--:|
|1|A|1|2020-06-19|77|
|2|B|2|2020-06-14|37|
|3|C|3|2020-06-2|7|
|4|D|4|2020-06-9|1|
|5|E|3|2020-06-29|22|
|6|F|1|2020-06-19|71|
元々のテーブル A
|id|user|num|day|num2|
|:--:|:--:|:--:|:--:|
|1|||||
|2|||||
|3|||||
元々のテーブル B
id | user |
---|---|
↓ こうしたい
処理後のテーブル A
|id|user|num|day|num2|
|:--:|:--:|:--:|:--:|
|1|A|1|2020-06-19|77|
|2|B|3|2020-06-14||
|3|C|3|2020-06-2||
|4|D|4|2020-06-9|444|
処理後のテーブル B
id | user |
---|---|
5 | E |
6 | F |
この場合は必要なSQL文は三つあると思います。
0. テーブルAのINSERT文
0. テーブルAのUPDATE文
0. テーブルBのINSERT文
条件の詳細は今回すいません。
そこでpython側ではこのようにしています。
(ここで間違っていたらすいません。)
python
1 2def get_date() 3 #1. 1つのurlからスクレイピング 4 #2. 用途別に格納 5 return A_insert , A_update , B_insert 6 7 8A_insert , A_update , B_insert = get_date() 9 10Input_A_insert(A_insert) 11Input_A_update(A_update) 12Input_B_insert(B_insert)
それぞれの Input_XXXXXX(XXXXXX)はこのようになっています。
python
1def Input_XXXXXX(XXXXXX): 2 conn = pymysql.connect(user='xxx',passwd='xxxx',host='xxxxx',db='xxx') 3 # エラー処理(例外処理) 4 try: 5 # カーソルを取得する 6 cur = conn.cursor() 7 8 sql = 'sql文' 9 cur.execute(sql) 10 conn.commit() 11 12 except pymysql.Error as e: 13 print('MySQLdb.Error: ', e) 14 cur.close 15 conn.close
これからも、基準や項目の増減・変化が見込まれます。
そのため、同じような形式のデータでも、用途別にlistに格納してそれぞれ別の関数で実行を試みています。
そうすると、毎回SQLとの接続を切る形になっているのでPCの負担的にまずのでしょうか?sqlを使用するのはここだけでなく頻繁に使います。
*ここでもう一度質問を繰り返します。
今後の修正や、追加なども考えた時にどのような構成にするべきなのでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/19 01:00
2020/06/19 03:39 編集