簡體   English   中英

SQLITE3 FROM表Select列WHERE布爾語句

[英]SQLITE3 FROM table Select column WHERE Boolean statement

我已經嘗試了sqlite3語句的3種不同變體來選擇數據:

    cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
    cursor.execute('''SELECT * FROM users WHERE username = ?;''', (username,))
    cursor.execute('SELECT * FROM users WHERE username = "monkey1" ')

這些語句的引用來自1 2 但是,它們都不起作用。 我懷疑我所做的事情確實很愚蠢,但似乎無法弄清楚。

我希望能夠打印出用戶名“ monkey”的數據。 感謝任何幫助指出我的愚蠢錯誤。

import sqlite3
import datetime


def get_user(connection, rows='all', username=None ):
    """Function to obtain data."""
    #create cursor object from sqlite connection object
    cursor = connection.cursor() 
    if rows == 'all':
        print("\nrows == 'all'")
        cursor.execute("SELECT * FROM users")
        data = cursor.fetchall()
        for row in data:
            print(row)

    if rows == 'one':
        print("\nrows == 'one'")
        cursor.execute('SELECT * FROM users WHERE username = ?', (username,))
        #cursor.execute('''SELECT * FROM users WHERE username = ?;''', (username,))
        #cursor.execute('SELECT * FROM users WHERE username = "monkey1" ')
        data = cursor.fetchone()
        print('data = ',data)

    cursor.close()
    return data



def main():
    database = ":memory:"

    table = """ CREATE TABLE IF NOT EXISTS users (
                    created_on  TEXT    NOT NULL UNIQUE,
                    username    TEXT    NOT NULL UNIQUE,
                    email       TEXT    NOT NULL UNIQUE
                 ); """

    created_on = datetime.datetime.now()
    username   = 'monkey'
    email      = 'monkey@gmail'

    created_on1 = datetime.datetime.now()
    username1   = 'monkey1'
    email1      = 'monkey1@gmail'

    # create a database connection & cursor
    conn = sqlite3.connect(database)
    cursor = conn.cursor() 

    # Insert data
    if conn is not None:
        # create user table
        cursor.execute(table)
        cursor.execute('INSERT INTO users VALUES(?,?,?)',(
            created_on, email, username))
        cursor.execute('INSERT INTO users VALUES(?,?,?)',(
            created_on1, email1, username1))
        conn.commit()
        cursor.close()
    else:
        print("Error! cannot create the database connection.")

    # Select data
    alldata = get_user(conn, rows='all')
    userdata = get_user(conn, rows='one', username=username )
    print('\nalldata = ', alldata)
    print('\nuserdata = ', userdata)
    conn.close()


main()

您的表定義具有字段created_on, username, email順序created_on, username, email但是您將數據插入為created_on, email, username 因此,第一行的用戶名是'monkey@gmail'

避免這種錯誤的一種好方法是在INSERT語句中指定列,而不是依賴於正確獲取原始表定義的順序:

INSERT INTO users (created_on, email, username) VALUES (?,?,?)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM