一般来说,我熟悉MySQL,但不熟悉Python。 我尝试生成.py脚本,它将具有散列密码的用户插入到radius服务器的mysql数据库中。Python:MySQL-Query失败
这就是我的剧本至今:
#!/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查询失败”,它查找如果一个用户名现有的第一查询工作正常。
的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!
我选择了从数据库中的所有记录,实际上,这些记录都存储。但为什么我会得到一个异常? – Drudge
要获取更多信息,请将'except'更改为',但将例外设置为e:'。然后将'print'FEHLER查询失败''更改为'print e' – huu
有趣的是,我最后一条评论将解决您的问题,但没有透露幕后发生的情况,并导致您痛苦。查看我的答案了解更多详情。 – huu