gpt4 book ai didi

Python:MySQL 查询失败

转载 作者:行者123 更新时间:2023-11-29 00:14:04 25 4
gpt4 key购买 nike

总的来说,我熟悉MySQL,但不熟悉Python。我尝试生成 .py 脚本,该脚本将具有散列密码的用户插入到 radius 服务器的 mysql 数据库中。

到目前为止,这是我的脚本:

#!/usr/bin/python2.7

import sys
import MySQLdb
from passlib.hash import django_pbkdf2_sha256 as cryptohandler


def adduser(username, password_plain):
password = cryptohandler.encrypt(password_plain)

conn = MySQLdb.connect(host="localhost", port=3306, user="radius", passwd="radpass", db="radius")
cursor = conn.cursor()
if cursor.execute("SELECT op FROM radcheck WHERE username = %s", (username)):
print 'FEHLER: User existiert bereits und kann daher nicht angelegt werden.'
sys.exit(1)
else:
try:
cursor.execute("INSERT INTO radcheck(username, attribute, op, value) VALUES(%s, 'Password', ':=', %s)", (username, password))
conn.commit()
print 'OK user '+ username +' successfully added with hash'+ password
sys.exit(0)
except:
conn.rollback()
print 'FEHLER query failed'
sys.exit(1)

def main():
adduser(sys.argv[1], sys.argv[2])


main()

输出始终是“FEHLER query failed”,如果用户名存在,第一个查询可以正常工作。

radcheck 表:

id int(11) unsigned Null=No Key=Pri Default=Null Extra=auto_increment
username varchar(64) Null=No Key=Mul
attribute varchar(64) Null=No
op char(2) Null=No Default="=="
value varchar(253) Null=No

在 mysql 命令行中执行查询工作正常。

我的脚本哪里出错了?我认为它可能是一个太长的散列,但散列只有 < 100 个字符长。 (但包含特殊字符,例如美元 $)。另外,我很感激帮助如何调试 python-sql-scripts 一般!

最佳答案

这里的问题不是你的 MySQL 代码,而是这个 try/except block :

try:
cursor.execute("INSERT INTO radcheck(username, attribute, op, value) VALUES(%s, 'Password', ':=', %s)", (username, password))
conn.commit()
print 'OK user '+ username +' successfully added with hash'+ password
sys.exit(0)
except:
conn.rollback()
print 'FEHLER query failed'
sys.exit(1)

当您调用 sys.exit(0) 时,它会引发一个名为 SystemExit 的异常。由于简单的 except: catch 语句会捕获 SystemExit,因此当您调用 sys.exit(0) 时将始终执行此 block 。为防止这种情况发生,请将您的 except: 捕获更改为:

except Exception as e:
conn.rollback()
print 'FEHLER query failed'
sys.exit(1)

更好的是,如果你只捕获 MySQL 错误:

except MySQLdb.Error as e:
conn.rollback()
print 'FEHLER query failed'
sys.exit(1)

关于Python:MySQL 查询失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23599480/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com