質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

6978閲覧

Pythonで辞書オブジェクト(dictionary)の値をデータベースにINSERTする方法

---stax---

総合スコア148

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/01/25 00:03

表題の件で質問させてください
windowsで開発を進めています
sqlalchemyを使ってpostgresqlとやり取りを行っています

データベースのあるテーブルのvalue列から”今日の天気は晴れ”、”昨日の天気は雨”という文字列を取得し、その文字列を単語区切りしています(変数:data)

その単語で区切ったデータに対し同じ単語がいくつあったか、という情報を ”#単語区切りにしたデータの重複している個数を数える”部分のコードで辞書オブジェクトの型で取得しています

このデータ(変数:counter)を取得してきたテーブルとは別のテーブルの"A"という列には単語を(KEY)、"B"という列にはデータの重複している個数(区切った単語に関連付いているVALUE)をINSERTしたいのですがどのような記述をすれば良いか調べても見つけられず悩んでいます

天気は:2
というデータがあると
A列   B列
天気   2
というようにdictionaryの関係でINSERTしたいです

分かりにくい質問で申し訳ありませんがアドバイスよろしくお願いいたします

python

1#!/usr/bin/env python 2# -*- coding: utf-8 -*- 3from sqlalchemy import create_engine,Column,Integer,Text 4from sqlalchemy.orm import sessionmaker 5from sqlalchemy.ext.declaretive import declarative_base 6from functional import seq 7from janome.tokenizer import Tokenizer 8from collections import Counter 9 10Base = declarative_base() 11class PythonTest(Base): 12 __tablename__ = 'Python_test' 13 id = Column(Integer,primary_key = True) 14 value = column(Text) 15 16if __name__ == '__main__': 17 engine = create_engine('postgresql://postgres:postgres@localhost/Datatest') 18 session = sessionmaker(bind = engine) 19 sess = Session() 20 21 pages = sess.query(PythonTest).all() 22 ids = seq(pages).map(lamda x: x.value).to_list() 23 print(ids) 24 25 data = [] 26 27#DBから取得したデータを単語区切りにする 28   t = Tokenizer() 29 tokens = t.tokenize(ids) 30 for text in ids: 31 for token in t.tokenize(text): 32 data.append(token.surface) 33 print(data) 34 35#単語区切りにしたデータの重複している個数を数える 36 countdata = data 37 counter = Counter(countdata) 38 counter.most_common() 39 40#重複データ除く 41 wordlist = [] 42 for word in data: 43 if words not in wordlist: 44 wordlist.append(word) 45 46class insertword(BASE): 47 __tablename__ = 'insertdata' 48 word = Column(Text,primary_key = True) 49 count = column(Integer) 50 51if __name__ == '__main__': 52 insertdt = insertword() 53 insertdt.word = #INSERTする部分がわかりません 54   sess.add(insertdt) 55 sess.commit() 56 57 58

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

辞書のkeyとvalueを対応させながらSQL文を作る方法がわからないということでしょうか?
pythonでは、items()を使って辞書をループさせると、対応するkeyとvalueを一度に取り出せます。

python

1dic = {'sunny': 1, 'cloudy': 3, 'rainy': 2} 2for k, v in dic.items(): 3 print('{} {}'.format(k, v)) 4 5# sunny 1 6# cloudy 3 7# rainy 2

同じ行に入れるべきkeyとvalueをひとつずつ取り出せるので、後はsqlalchemyの仕様に従ってループ内で順にINSERTする(あるいはSQL文に順に値を足していき、最後にまとめてINSERTする)とよいです。

投稿2018/01/25 11:41

編集2018/01/25 11:42
Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問