programing

SQL 문(Python, MySQL)에서 일부 매개 변수가 사용되지 않았습니다.

copyandpastes 2022. 10. 29. 12:13
반응형

SQL 문(Python, MySQL)에서 일부 매개 변수가 사용되지 않았습니다.

다음 Python 코드에서 오류가 발생합니다.

import mysql.connector
cnx = mysql.connector.connect(user='root', password='',
                          host='127.0.0.1',
                          database='DB')
cursor = cnx.cursor()

Name = "James"
Department = "Finance"
StartYear = 2001
CurrentPos = 2001
Link = ""

add_user = ("INSERT INTO DB.tbluser "
       "(username, department, startyear, currentpos, link) "
       "VALUES (%s, %s, %d, %d, %s)")
data_user = (Name, Department, StartYear, CurrentPos, Link)
cursor.execute(add_user, data_user)
cnx.commit()
cursor.close()
cnx.close()

에러 메세지는 다음과 같습니다.

mysql.connector.errors.ProgrammingError: Not all parameters were used in the SQL statement

왜 그런지 알겠어요?

파라미터 마커는%s것은 아니다.%d.

add_user = """INSERT INTO DB.tbluser 
              (username, department, startyear, currentpos, link) 
              VALUES (%s, %s, %s, %s, %s)"""

파라미터 마커는 다음과 같이 사용됩니다.mysql.connector와 똑같아 보일 수 있습니다.%sPython 문자열 포맷에서 사용되지만 이 관계는 우연의 일치에 불과합니다.일부 데이터베이스 어댑터는 다음과 같습니다.oursql그리고.sqlite3사용하다?대신 파라미터 마커로서%s.

자, 다음은 저의 해결책입니다.

%d는 %s의 것이어야 합니다.

''는 여러 줄에 대해 사용할 수 있습니다.또한 행의 선두에 +를 붙이고 마지막에 \를 붙입니다만, 이 문제는 아닙니다.

가끔 커서가 보이기도 해요.execute(숫자, 값) 또는 커서가 표시됩니다.execute(add_user, data_user) 버그가 발생할 수 있습니다.그래서 쿼리에 직접 값을 첨부합니다.

이를 수행하려면 먼저 data_user를 add_user 위로 이동합니다.그런 다음 쿼리 문자열 끝에 %values를 추가합니다(이 경우 %data_user).이를 통해 cursor.exec(add_user) 명령어 앞에 작은 인쇄(add_user)를 만들어 다른 버그를 찾을 수 있습니다.


        import mysql.connector

        cnx = mysql.connector.connect(
              user='root', 
              password='',
              host='127.0.0.1',
              database='DB')

        cursor = cnx.cursor()

        Name = "James"
        Department = "Finance"
        StartYear = 2001
        CurrentPos = 2001
        Link = ""

        data_user = (Name, Department, StartYear, CurrentPos, Link)

        add_user = '''(INSERT INTO DB.tbluser 
        (username, department, startyear, currentpos, link) 
        VALUES (%s, %s, %s, %s, %s))'''%data_user


        cursor.execute(add_user)
        cnx.commit()
        cursor.close()
        cnx.close()

add_user = ''''("DB.tbluser에 삽입" "("values, department, start year, currentpos, link") "VALUES (%s, %s, %s, %s)"""'''''

=>여러 줄의 문을 사용 중이므로, 여기에 작은 따옴표를 세 개 사용하고 %s을 사용하여 전달 값을 문자열로 나타냅니다.%d는 mysql에서 값을 전달하기 위해 지원되지 않기 때문에 작동합니다.

import mysql.connector

def login(self,name,password):
    db = mysql.connector.connect(host="localhost",user="root",passwd="Cyber@123",database="mydata")
    if(db):
        print("connection successfull")
    else:
        print("faild")
    query = db.cursor()
    syntext = """insert into login(use_name,psd) values(%s,%s)"""
    value = (name,password)
    query.execute(syntext,value)
    db.commit()

단일 따옴표를 사용하다

sql = 'insert into Student (id, fname, lname, school) values(%s, %s, %s , %s)'
values = (4, "Gaddafi", "Adamu", "Informatic")

a.execute(sql, values)

mydb.commit()
print(a.rowcount, "record inserted.")

언급URL : https://stackoverflow.com/questions/20818155/not-all-parameters-were-used-in-the-sql-statement-python-mysql

반응형