您好,我是SQL/python新手,请有人帮助我使用python命令搜索数据库,谢谢:)

您好,我是SQL/python新手,请有人帮助我使用python命令搜索数据库,谢谢:),python,mysql,sql,database,Python,Mysql,Sql,Database,我有一个名为“staff”的表,有几个列,但我感兴趣的两个是“username”和“password”。我试图创建一个提示,要求用户输入用户名,稍后我将输入密码并检查数据库中的表,以查看该用户名是否存在。我对如何做到这一点有点不知所措,但这是我迄今为止编写的代码。如果有人能帮忙,我们将不胜感激,谢谢 import MySQLdb db = MySQLdb.connect(host="127.0.0.1", user="root", passwd="", db="sakila") cur =

我有一个名为“staff”的表,有几个列,但我感兴趣的两个是“username”和“password”。我试图创建一个提示,要求用户输入用户名,稍后我将输入密码并检查数据库中的表,以查看该用户名是否存在。我对如何做到这一点有点不知所措,但这是我迄今为止编写的代码。如果有人能帮忙,我们将不胜感激,谢谢

import MySQLdb


db = MySQLdb.connect(host="127.0.0.1", user="root", passwd="", db="sakila")

cur = db.cursor()

search = raw_input("Enter username: ")

query = ('SELECT username, password FROM staff')

cur.execute(query)


results = cur.fetchall()

if search in results:
    print("username found")
else:
    print("invalid username")

db.close()

编辑:确保检查底部@FallenAngel的注释,并检查代码中的安全风险

正如Gordon提到的,您应该使用WHERE子句使事情变得更简单。像这样:

import re

import MySQLdb

db = MySQLdb.connect(host="127.0.0.1", user="root", passwd="", db="sakila")

cur = db.cursor()

search = raw_input("Enter username: ")

user_regex =  # input a regex here to make sure the username matches a format which avoids SQL injection.

if re.search(user_regex, search):

    query = ("SELECT password FROM staff WHERE username = %s", (search,)) #  add a WHERE clause

    cur.execute(query)

    results = cur.fetchall()

else:
    results = None

if results:  # Now we just need to check if the queryset is empty or not.
    print("username found")
else:
    print("invalid username")

db.close()
一般的经验法则是尝试让SQL进行搜索,它是为它而构建的,因此比Python更快

确保您的用户名列至少是主键或唯一键,以免重复

编辑:基于@FallenAngels点,您不应该直接将用户输入注入到SQL查询中,因为这会使您暴露于SQL注入中

编辑2:

首先请注意,我们不再为此解决方案使用%s%var格式,因为它不安全!相反,我们使用的是%s,var,用于db查询的格式

%它也可以是%d、%n和字符串中的其他几个字母,是一种字符串格式,用于将变量内容插入字符串中

基本上如果你说:

"some stuff here: %s" % var

var中的任何内容都将替换字符串中的%s。这里有几个复杂之处,因此值得在这里多读一些:

也许您需要将其分为两个文件

在第一个文件中,请构建表单,并通过app.route将其链接到python文件中的def

通过这种方式,您可以将您的演示文稿和业务模型完全分开,并且保持更高的可维护性


如果您需要代码的简化,请告诉我。

我想您需要SQL语句中的WHERE子句来选择用户。哦,那么这到底是如何工作的呢?我昨天刚开始使用SQL,如果我是你,我会看看SQLAlchemy。相信我,你的生活会更美好,对于那些投反对票的人,请告诉我为什么,这样我才能改进我的答案!永远不要对数据库查询使用字符串操作,因为它们容易受到SQL注入的攻击…非常感谢@Scironic的帮助:@SakshamYadav,请确保您考虑FallenAngel说过的话,我正在更新我的答案atm。请从工作人员处选择密码,其中用户名=%s,搜索,必须对所有占位符使用%s,并用列表或元组传递值。