iT邦幫忙

0

無法把資料存進sqlite,前面問題已解決,但另有問題。

  • 分享至 

  • twitterImage
def inputData():
    while True:
        newWord = input("請輸入新單字or按Enter返回主選單:\n")
        if newWord == "": break
        sqlstr = f"select * from table01 where word='{newWord}'"
        cursor = conn.execute(sqlstr)
        row = cursor.fetchone()
        print(row)
        if not row==None:
            print(f"{newWord} 單字已重複")
            continue
        translation = input("請輸入翻譯:\n")
        sqlstr = "INSERT INTO table01 VALUES ({},{})" .format(newWord, translation)
        #f"update table01 set trans='{translation}' where word = '{newWord}'"
        #f'insert into table01(word,trans) values("{newWord}","{translation}")'
        conn.execute(sqlstr)
        conn.commit()
        print("單字已儲存")

我輸入完翻譯後按下enter

程式就直接結束了

我試了了半天還是看不出問題

麻煩高手幫幫忙了。

目前情況:

今天終於找到問題
我發現工作目錄不同

conn = sqlite3.connect('filename')

我存放檔案的地方在D:
上面這行程式卻一直在C:\之下工作

後來我在主程式加上
os.getcwd()和os.chdir()
但還是沒辦法

之後把絕對路徑貼在filename的位置才解決

所以想請問各位高手
為什麼會發生這些問題???
那些情況可能引起???

另外我想讓這程式有可攜帶性
也就是我想讓它在每台電腦的每個位置都能執行
該如何實現???

因為是文科生學程式
如果問題太愚蠢請見諒

再次感謝回答的各位高手

先在兩列 sqlstr = 的下一列
加上
print(sqlstr)
看看 sqlstr 是否是你所預期的結果
感謝你的意見。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
froce
iT邦大師 1 級 ‧ 2018-09-09 12:54:18
最佳解答

你要確定你工作目錄是對的。
另外python有方法知道程式本身是在那個資料夾下。

import os
# 得到執行檔所處資料夾之絕對路徑
# __file__是python的內建屬性,就是執行檔本身。
py_dir = os.path.dirname(os.path.abspath(__file__))

# 產生資料庫絕對路徑
db_path = os.path.join(py_dir, 'DataBase.db')

另外單引號加下去就是字串了

# 這樣是在工作目錄下產生一個叫filename的資料庫。
conn = sqlite3.connect('filename')

# 這樣才是依照filename變數去產生資料庫
conn = sqlite3.connect(filename)

原來如此!!!!/images/emoticon/emoticon12.gif
又學到許多知識。
非常感謝你。
/images/emoticon/emoticon41.gif

0
小魚
iT邦大師 1 級 ‧ 2018-09-09 08:03:06

你給它定義但是你沒有呼叫它啊,
最後面(放在最前頭)加一行

inputData()

就會開始執行了

執行了以後還會有問題,
就是conn沒有定義,
當然也許你是沒有PO出來那就算了。

看更多先前的回應...收起先前的回應...

因為其他區塊都沒問題
就沒貼上來了
就這函數有問題

在終端機上有執行到輸入翻譯
按下enter就直接程式結束
最後的單字儲存也沒跑出來

小魚 iT邦大師 1 級 ‧ 2018-09-09 10:43:18 檢舉
sqlstr = "INSERT INTO table1 (word, trans) VALUES ('{}','{}')" .format(newWord, translation)

要加上字串的符號

小魚 iT邦大師 1 級 ‧ 2018-09-09 11:28:16 檢舉

另外來源裡面是放絕對路徑沒有錯,
你應該要去找Python如何取得目前路徑,
組成一個絕對路徑。

感謝你的意見。
/images/emoticon/emoticon41.gif

我要發表回答

立即登入回答