我的 Discord 機器人查詢資料庫并檢查是否有匹配的條目。為了檢查匹配的條目,我使用了像這里這樣的 if 陳述句。但不知何故我的代碼沒有按預期作業:
def check_db_entry():
message = 'Some Message.'
user_id : int = 1234
# check if user already exists in database
# connect to database
con = get_connection()
cur = con.cursor()
# search in database
cur.execute('SELECT id FROM user WHERE id=?', user_id)
result = cur.fetchone()
if result:
print(f'\nUser found in db with {user_id}.\n')
else:
print(f'\nNo user found in db with {user_id}.\n Create user')
con.commit()
con.close()
我的 2 個列印陳述句都沒有實際列印出來。這很奇怪,因為iforelse陳述句應該起作用。
連接到我的資料庫成功。我已經用print(str(result))這里我的資料庫設定代碼對此進行了多次測驗:
def create_database():
if not os.path.exists('db'):
os.mkdir('db')
# database setup
try:
con = sqlite3.connect(SQLITE_DB_PATH)
cur = con.cursor()
cur.execute('CREATE TABLE IF NOT EXISTS user (id INTEGER NOT_NULL, balance REAL NOT_NULL, text1 TEXT NOT_NULL, text2 TEXT NOT_NULL)')
con.commit()
con.close()
except Error as e:
print('Failed to setup database.\n' e)
exit(1)
# connect to the database, returns connection object
def get_connection():
try:
con = sqlite3.connect(SQLITE_DB_PATH)
return con
except:
print('Unable to connect to database. Please try again later.\n')
exit(1)
我在這里錯過了什么嗎?
uj5u.com熱心網友回復:
fetchone()如果查詢未回傳任何行,則回傳None,這與 , 不同false,這是您應該檢查的內容。
所以改成這樣:
if result is None:
print(f'\nNo user found in db with {user_id}.\n Create user')
else:
print(f'\nUser found in db with {user_id}.\n')
此外,您應該將引數user_id作為元組傳遞:
cur.execute('SELECT id FROM user WHERE id=?', (user_id,))
此外,NOT_NULL對于 SQLite 沒有任何意義,盡管它不會引發錯誤。
你應該使用NOT NULL:
cur.execute('DROP TABLE IF EXISTS user;') # execute once to drop he table that you created
cur.execute('CREATE TABLE IF NOT EXISTS user (id INTEGER NOT NULL, balance REAL NOT NULL, text1 TEXT NOT NULL, text2 TEXT NOT NULL)')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/336536.html
標籤:Python sqlite if 语句 不和谐.py 无类型
上一篇:取決于錯誤輸出的條件操作
下一篇:檢查Php陣列中的一個值是否不同
