Hướng dẫn python mysql select with multiple variables - python mysql chọn với nhiều biến

Tuy nhiên, tôi đang cố gắng thực thi truy vấn bằng Python, khi cố gắng lấy email và mật khẩu mà người dùng có đầu vào vào trang web, nó sẽ trả về "Bạn có lỗi trong cú pháp SQL của mình; Cú pháp phù hợp để sử dụng gần '' DSFS '' ở dòng 1 "[DSFS là mật khẩu không chính xác]

@login_blueprint.route['/login', methods=['GET', 'POST']]
def login[]:
    if request.method == 'POST' and 'email' in request.form:
        try:
            email = request.form['email']
            password = request.form['password']
            database = mysql.connector.connect[
                host=DBHost,
                user=DBUser,
                passwd=DBPass,
                database=DB
            ]
            cursor = database.cursor[]
            query = "SELECT * FROM users WHERE [email, password] = %s, %s"
            values = [email, password]
            cursor.execute[query, values]
            cursor.fetchall[]
            return render_template['dashboard.html', email=email]
        except Exception as error:
            print[error]
            return jsonify[result='that account does not exist']
    return render_template['login.html']

Khi tôi đăng ký chi tiết, nó hoạt động tốt và nhập dữ liệu vào bảng MySQL.

@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']

Sử dụng phương thức fetchone []

Nếu bạn chỉ quan tâm đến một hàng, bạn có thể sử dụng phương thức

cursor.execute[operation, params=None, multi=False]
iterator = cursor.execute[operation, params=None, multi=True]
3.

cursor.execute[operation, params=None, multi=False]
iterator = cursor.execute[operation, params=None, multi=True]

Phương thức

cursor.execute[operation, params=None, multi=False]
iterator = cursor.execute[operation, params=None, multi=True]
3 sẽ trả về hàng đầu tiên của kết quả:

Ghi chú

Trong Python, một tuple chứa một giá trị duy nhất phải bao gồm dấu phẩy. Ví dụ, ['ABC'] được đánh giá là vô hướng trong khi ['ABC',] được đánh giá là một tuple.['abc'] is evaluated as a scalar while ['abc',] is evaluated as a tuple.

Ví dụ này chèn thông tin về một nhân viên mới, sau đó chọn dữ liệu cho người đó. Các câu lệnh được thực thi dưới dạng các hoạt động

@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
1 riêng biệt:

insert_stmt = [
  "INSERT INTO employees [emp_no, first_name, last_name, hire_date] "
  "VALUES [%s, %s, %s, %s]"
]
data = [2, 'Jane', 'Doe', datetime.date[2012, 3, 23]]
cursor.execute[insert_stmt, data]

select_stmt = "SELECT * FROM employees WHERE emp_no = %[emp_no]s"
cursor.execute[select_stmt, { 'emp_no': 2 }]

Các giá trị dữ liệu được chuyển đổi khi cần thiết từ các đối tượng Python thành thứ mà MySQL hiểu. Trong ví dụ trước, ví dụ

@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
5 được chuyển đổi thành
@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
6.

Nếu

@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
2 được đặt thành
@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
3,
@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
1 có thể thực thi nhiều câu lệnh được chỉ định trong chuỗi operation. Nó trả về một trình lặp cho phép xử lý kết quả của mỗi câu lệnh. Tuy nhiên, sử dụng các tham số không hoạt động tốt trong trường hợp này và thường là một ý tưởng tốt để tự thực hiện từng câu lệnh.

Ví dụ sau chọn và chèn dữ liệu trong một thao tác

@register_blueprint.route['/register', methods=['GET', 'POST']]
def register[]:
    if request.method == 'POST' and 'email' in request.form:
        email = request.form['email']
        password = request.form['password']
        database = mysql.connector.connect[
            host=DBHost,
            user=DBUser,
            passwd=DBPass,
            database=DB
        ]
        cursor = database.cursor[]
        query = "INSERT INTO users [email, password] VALUES [%s, %s]"
        values = [email, password]
        cursor.execute[query, values]
        database.commit[]
        return jsonify[result='account created, proceed to login']
    return render_template['register.html']
1 duy nhất và hiển thị kết quả của mỗi câu lệnh:

operation = 'SELECT 1; INSERT INTO t1 VALUES []; SELECT 2'
for result in cursor.execute[operation, multi=True]:
  if result.with_rows:
    print["Rows produced by statement '{}':".format[
      result.statement]]
    print[result.fetchall[]]
  else:
    print["Number of rows affected by statement '{}': {}".format[
      result.statement, result.rowcount]]

Nếu kết nối được cấu hình để tìm nạp các cảnh báo, các cảnh báo được tạo bởi hoạt động có sẵn thông qua phương thức mysqlcursor.fetchwarnings [].

Chọn từ một bảng

Để chọn từ bảng trong MySQL, hãy sử dụng câu lệnh "Chọn":

Thí dụ

Chỉ lấy một hàng:

Nhập MySQL.Connector

myDB = mysql.connector.connect [& nbsp; host = "localhost", & nbsp; user = "yourusername", & nbsp; password = "yourPassword", & nbsp; cơ sở dữ liệu = "mydatabase"]
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
]

mycursor = mydb.cursor []

mycursor.execute ["Chọn * từ khách hàng"]

myResult = mycursor.fetchall []

cho x trong myResult: & nbsp; in [x]
  print[x]

Chạy ví dụ »

Lưu ý: Chúng tôi sử dụng phương thức

cursor.execute[operation, params=None, multi=False]
iterator = cursor.execute[operation, params=None, multi=True]
2, tìm nạp tất cả các hàng từ câu lệnh thực hiện cuối cùng. We use the
cursor.execute[operation, params=None, multi=False]
iterator = cursor.execute[operation, params=None, multi=True]
2 method, which fetches all rows from the last executed statement.

Chọn cột

Để chỉ chọn một số cột trong bảng, hãy sử dụng câu lệnh "Chọn" theo sau là tên cột:

Thí dụ

Chỉ chọn các cột tên và địa chỉ:

Nhập MySQL.Connector

myDB = mysql.connector.connect [& nbsp; host = "localhost", & nbsp; user = "yourusername", & nbsp; password = "yourPassword", & nbsp; cơ sở dữ liệu = "mydatabase"]
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
]

mycursor = mydb.cursor []

mycursor.execute ["Chọn * từ khách hàng"]

myResult = mycursor.fetchall []

cho x trong myResult: & nbsp; in [x]
  print[x]

Chạy ví dụ »

Lưu ý: Chúng tôi sử dụng phương thức
cursor.execute[operation, params=None, multi=False]
iterator = cursor.execute[operation, params=None, multi=True]
2, tìm nạp tất cả các hàng từ câu lệnh thực hiện cuối cùng.

Chọn cột

Để chỉ chọn một số cột trong bảng, hãy sử dụng câu lệnh "Chọn" theo sau là tên cột:

Thí dụ

Chỉ chọn các cột tên và địa chỉ:

Nhập MySQL.Connector

mycursor = mydb.cursor []
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
]

mycursor = mydb.cursor []

mycursor.execute ["Chọn * từ khách hàng"]

myResult = mycursor.fetchall []

print[myresult]

Chạy ví dụ »


%S trong Python SQL là gì?

Chúng ta cần cung cấp các giá trị trong các khoản giữ chỗ [ %s] trước khi thực hiện truy vấn. Vượt qua các biến Python ở vị trí của người giữ chỗ khi chúng tôi thực hiện truy vấn. Chúng ta cần chuyển hai đối số sau cho một con trỏ. thực thi [] hàm để chạy truy vấn tham số hóa.supply values in placeholders [ %s ] before executing a query. Pass Python variables at the placeholder's position when we execute a query. We need to pass the following two arguments to a cursor. execute[] function to run a parameterized query.

Làm thế nào để bạn vượt qua các giá trị động trong truy vấn SQL trong Python?

Việc gán truy vấn SQL cho biến python ở đây {0} và {1} là các máy nội suy chuỗi cho phép chúng tôi truyền các giá trị động trong thời gian chạy. Các giá trị động có thể được thay thế trực tiếp thành {0} và {1} bằng tên của chúng, chẳng hạn như {cột_name} và {value_holder}. Nhưng nó thường có lợi để tránh gọi theo cách tiếp cận tên.Dynamic values can be substituted directly to {0} and {1} by their names, such as {column_name} and {value_holder}. But it is often beneficial to avoid call by name approach.

Truy vấn tham số hóa trong MySQL là gì?

Truy vấn tham số hóa là một truy vấn trong đó các trình giữ chỗ được sử dụng cho các tham số và các giá trị tham số được cung cấp tại thời điểm thực thi.Lý do quan trọng nhất để sử dụng các truy vấn tham số hóa là để tránh các cuộc tấn công tiêm SQL.a query in which placeholders are used for parameters and the parameter values are supplied at execution time. The most important reason to use parameterized queries is to avoid SQL injection attacks.

Mycursor Python là gì?

MySQLcursor của MySQL-ConneNector-Python [và các thư viện tương tự] được sử dụng để thực hiện các câu lệnh để liên lạc với cơ sở dữ liệu MySQL.Sử dụng các phương thức của nó, bạn có thể thực hiện các câu lệnh SQL, tìm nạp dữ liệu từ các bộ kết quả, quy trình cuộc gọi.used to execute statements to communicate with the MySQL database. Using the methods of it you can execute SQL statements, fetch data from the result sets, call procedures.

Bài Viết Liên Quan

Chủ Đề