輸出如下: WELCOME TO THE LIBRARY SYSTEM 1.LOGIN 2.NEW USER 3.EXIT Enter your choice : 2 WELCOME, NEW USER, PLEASE ENTER A VALID USERNAME AND PASSWORD Enter username: ASHES Enter Password: MASON
然后,有錯誤的回溯:
回溯(最后一次呼叫):檔案“C:\Users\Rotten\AppData\Local\Programs\Python\Python310\lib\site-packages\mysql\connector\connection_cext.py”,第 523 行,在 cmd_query self._cmysql .query(query, _mysql_connector.MySQLInterfaceError: 您的 SQL 語法有錯誤;請查看與您的 MySQL 服務器版本相對應的手冊,了解在 '\xe9\xfbo\xcdrSy\xe9\x9f\xc2\xb7 附近使用的正確語法\xebs\x10\x01\xfc\xb6\xa4\xeb\xe6\xe1\xca\xfc\xe' 在第 1 行
在處理上述例外的程序中,又出現了一個例外:
您的 SQL 語法有錯誤;檢查與您的 MySQL 服務器版本相對應的手冊,以在 '\xe9\xfbo\xcdrSy\xe9\x9f\xc2\xb7\xebs\x10\x01\xfc\xb6\xa4\xeb\xe6\xe1 附近使用正確的語法\xca\xfc\xe' 在第 1 行
mysql> use library;
Database changed
mysql> desc users;
---------- -------------- ------ ----- --------- -------
| Field | Type | Null | Key | Default | Extra |
---------- -------------- ------ ----- --------- -------
| username | varchar(20) | YES | | NULL | |
| key | varchar(100) | YES | | NULL | |
| salt | varchar(100) | YES | | NULL | |
---------- -------------- ------ ----- --------- -------
3 rows in set (0.15 sec)
Minimal code:
import mysql.connector
import hashlib
import os
mycon=mysql.connector.connect(host="localhost",user="root",passwd="123456",database="library")
cursor=mycon.cursor()
stmt = "SHOW TABLES LIKE 'users'"
cursor.execute(stmt)
result = cursor.fetchone()
if result:
pass
else:
cursor.execute("create table users(username varchar(20),key varchar(100),salt varchar(100));")
cursor.execute("create table userlist(username varchar(20),book varchar(200));")
def checkkey(usertest):
cursor.execute("select count(username) from users where username='{}';".format(usertest))
count = cursor.fetchone()[0]
if count==1:
return False
elif count==0:
return True
else:
print("error no valid value returned")
return False
def adduser(username,password):
salt = os.urandom(32)
key = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)
cursor.execute("insert into users values('{}','{}','{}'".format(username,key,salt))
mycon.commit()
while True:
print("WELCOME, NEW USER, PLEASE ENTER A VALID USERNAME AND PASSWORD")
usertest=input("Enter username: ")
usertest2=usertest
x=checkkey(usertest)
if x==True:
password=input("Enter Password: ")
username=usertest2
adduser(username,password)
print("USER CREATED")
break
elif x==False:
print("Username already exists, try again")
continue
else:
print("Error, unknown exception in boolean")
break
Why is this happening?
uj5u.com熱心網友回復:
為了完整起見,這里是完整的答案:
有幾個問題:
- 這一行的括號不平衡
cursor.execute("insert into users values('{}','{}','{}'".format(username,key,salt)) - 嘗試將位元組資料插入
varchar- 這可能有效,這實際上取決于您的 sql 引擎 - 對二進制資料使用字串格式
1. 和 3. 的解決方案是使用準備好的陳述句:
cursor.execute("insert into users values(%s, %s, %s)", (username,key,salt))
如果問題仍然存在,則將表中的適當資料型別從varchar類似binary或varbinary
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/438530.html
