python - 注册-登录系统
问题描述
我正在尝试在 Python 3 中创建一个注册登录系统,但是当我检查电子邮件地址是否已经存在时,它总是说它不存在。我在“用户”表中插入了一个电子邮件和一个密码,当被问到我在这个脚本中使用了相同的电子邮件地址时,它仍然说它不存在。我在 MySQL 方面几乎没有经验,并认为这可能是一个不错的项目。谢谢你。
import cymysql
from getpass import getpass
def get_user_info():
while True:
email = input("Input your Email address (max. 64 chars.): ")
password = getpass("Input a password (max. 64 chars.): ")
if len(email) < 64 and len(password) < 64:
return email, password
def check_account(cur, email, password):
if(cur.execute(f"SELECT * FROM `users` WHERE `Email`='{email}' LIMIT 1")):
print("exist")
else:
print("no exist")
def main():
conn = cymysql.connect(
host='192.168.0.109',
user='root',
passwd='',
db='database'
)
cur = conn.cursor()
email = ''
password = ''
email, password = get_user_info()
check_account(cur, email, password)
cur.close()
conn.close()
if __name__ == '__main__':
main()
解决方案
免责声明:我还没有使用过cymysql
——下面附加的任何代码都未经测试。
首先,请注意 CyMySQL 是 PyMySQL [1]的一个分支项目,因此我将参考 PyMySQL 的文档。
从pymysql.cursors.Cursor.execute
文档:
execute(query, args=None) Execute a query Parameters: query (str) – Query to execute. args (tuple, list or dict) – parameters used with query. (optional) Returns: Number of affected rows Return type: int
要考虑的重要一点是execute
函数返回:受影响的行数。SELECT
查询不会影响任何行,因此该函数将返回 0 并且您的函数将合理no exist
打印。
用于fetchone
检查是否至少返回了一行。
def check_account(cur, email, password):
cur.execute(f"SELECT * FROM `users` WHERE `email`=%s LIMIT 1", (email,))
row = cur.fetchone()
if row:
print("exist")
else:
print("no exist")
cur.execute
(考虑到我之前的评论,我重写了你的电话。)
推荐阅读
- mysql - 在时间表上表示事件发生
- azure - 使用托管标识对 Azure 服务总线进行经过身份验证的 REST API 调用
- spring - 在带有 Postgres 的 Spring Boot 中使用 mybatis 批量插入 UUID 错误
- javascript - 将上传文件转换为字节数组以发送到 Angular/Typescript 中的 API 请求
- php - Laravel HasManyThrough 同一个模型,作用域不同
- html - 我们可以在单个 ul 中使用多个 ul 元素而不是多个 li 元素吗?
- android - coordinatorlayout 中的 recyclerview 无法正常工作
- apache-spark - PYSPARK - 在 partitionby() 之前使用 repartition() 将数据帧写入镶木地板文件时性能下降的解决方案?
- sql - 在 SQL 中查找字符串中的唯一尾随字符
- python - 在远程 SFTP 服务器上解压 tar.gz