2017-08-12 4 views
0

辞書を作りたいです。 ユーザーは単語を入力し、翻訳を行い、DictのようにRAMに保存し、データベースに保存します。問題:データはデータベースに格納されません。プログラムはSQLテーブルにデータを送信しません。

import sqlite3 as lite 

con = lite.connect('Dictionary.db') 
cur = con.cursor() 
cur.execute('create table if not exists Dict (WORD TEXT, TRANSLATION TEXT)') 
dictionary = {} 

def load_dict(): 
    """ From SQL transfers values ​​to RAM """ 
    cur = con.cursor() 
    cur.execute("SELECT * FROM Dict") 
    while True: 
     row = cur.fetchone() 
     if row == None: break 
     dictionary[row[0]] = row[1] 


def add_word(): 
    """ Add word to dict. """ 
    word = str(input('Word:')) 
    translation = str(input('Translate: ')) 
    for key in dictionary: 
     if key == word: 
      print('This word is in the dictionary ') 
      break 
    else: 
     dictionary[word] = translation 
     cur = con.cursor() 
     cur.execute("INSERT INTO Dict VALUES(?, ?)", (word, translation)) 


load_dict() 
add_word() 

答えて

2

実行後にcon.commit()が見つかりません。

、または自動的に実行した後、データベースにコミットするには、このようなオープンな接続:今

con = lite.connect('Dictionary.db', isolation_level=None)

コミットやロールバックの教育のために何か。 https://docs.python.org/2/library/sqlite3.html

から(コミット) ¶このメソッドは、現在のトランザクションをコミットします。このメソッドを呼び出さないと、commit()の最後の呼び出し以降に行ったことは、他のデータベース接続からは見えません。なぜデータベースに書き込んだデータが見えないのか不思議なら、このメソッドを呼び出すことを忘れないでください。

rollback()¶ このメソッドは、commit()の最後の呼び出し以降に変更がデータベースにロールバックされます。

と制御のトランザクション(コミット/ロールバック): https://docs.python.org/2/library/sqlite3.html#sqlite3-controlling-transactions

1

エントリは恒久化されていない理由は、そうする任意の命令がないことです。 INSERTを実行した後に

を追加して、DBに永続的に変更をコミットします。

翻訳に関する問い合わせを移動する必要があることがわかりますので、単語がテーブルに新規である場合にのみ質問されます。

関連する問題