在 Python 中的 mysql.execute() 语句中使用变量(对象)

Using variable(objects) inside a mysql.execute() statement in Python

我的 python 项目的以下代码似乎不起作用

import mysql.connector as sql  
    cxn=sql.connect(user='adithyan',password='vinod123',database='workout2')  
    cursor=cxn.cursor()  
    while True:
        try:
            l=[ ]  
            studentid =int(input("Please enter your student_id"))  
            a = 'select * from student_info where Student_ID = %studentid'  
            cursor.execute(a)    
            for i in cursor:  
                l.append(i)   
         except:    
            print("Student_id not found try again")

MySQL 连接没有问题, select 语句也没有问题(即当我独立 运行 在 python) 但是 看来我无法在 SQL 查询中使用 python 中的变量。另外求推荐 如果可能,任何其他选择!!

干杯, 阿迪斯安

P.S:-这是我的作业 NOT。为了学习 MySQL 我看 YouTube,在我的编码过程中,我想做一个简单的 python 项目。那是我遇到这个错误的时候

如果 studentid 是一个字符串,您的 sql 语句(或 a 变量)应该是这样的:

a =''' select * from student_info where Student_ID = '{studentid}'; '''.format(
   studentid=studentid
)

如果它是整数(或数值),则不需要在 {studentid}:

周围加任何引号
a =''' select * from student_info where Student_ID = {studentid}; '''.format(
   studentid=studentid
)

复杂度取决于给定输入的类型。如果您确定输入的类型,即如果它是字符串或数字,您可以直接采用 Khan's Answer,具有更好的字符串格式。几个例子:

# Method 1(f-string) - if a number
a = f'select * from student_info where Student_ID = {studentid}'
# if string
a = f"select * from student_info where Student_ID = '{studentid}'"

否则,如果给我们的输入类型是动态的,即可以是字符串或数字,这里有一个适用于此的单行代码:

a = 'select * from student_info where Student_ID = ' + (studentid if studentid.isnumeric() else "'"+studentid+"'")

只有在没有给出其他条件的情况下,即只有串联不会产生不必要的并发症时,上述情况才有可能。 您也可以使用 f-string:

a = f'''select * from student_info where Student_ID = {(studentid if studentid.isnumeric() else "'"+studentid+"'")}'''