【问题标题】:How to use multiple variables in pymysql如何在pymysql中使用多个变量
【发布时间】:2018-03-31 11:36:14
【问题描述】:

如何在查询中使用多个变量:

import pymysql

def get_firstname(y):


db = pymysql.connect(host="xxx.xxx.xxx.xxx", 
    user="xxxx",  
    passwd="xxxxx",     
    db="XXXXXXX")   

cur = db.cursor()

query = "SELECT first_name FROM information WHERE x = y;" 
cur.execute(query, (y))

result = str(cur.fetchone()[0])
return(result)

x = user_id
y = 1


print (get_firstname(y))

我希望能够根据我的选择将 x 更改为不同的变量。像 user_id、姓氏、电子邮件等。我数据库中的所有列。 #y 是另一个变量,它代表我数据库中列的值。

Ex1:如果 x 是“user_id”并且 y 是“1”,则结果是 user_id 为 1 的人的名字。

Ex2:如果 x 是“email”并且 y 是“person@person.com”,则结果是电子邮件 person@person.com 的人的名字。

【问题讨论】:

    标签: python mysql python-3.x pymysql


    【解决方案1】:

    使用下面的代码:

    import pymysql
    
    def get_firstname(x, y):
        db = pymysql.connect(host='xxx.xxx.xxx.xxx',
            port=3306,
            user='xxxx',  
            password='xxxxxxxx',     
            db='test_db')   
    
        cur = db.cursor()
    
        query = "SELECT first_name FROM `information` WHERE %s" %(x)
        final_query = query+"=%s"
        #print(final_query)
        cur.execute(final_query, (y,))
    
        result = cur.fetchall()
        return(result)
    
    x = 'user_id'
    y = 1
    
    output = get_firstname(x,y)
    if output:
        for x in output:
            print(x)[0]
    

    Sample Inputs:

    x = 'email_id'
    y = 'xx@gmail.com'
    

    x = 'user_id'
    y = 1        // Not enclosed with single quotes
    

    【讨论】:

    • 感谢您的评论。
    • 不过又给了我一个问题。我将其用作 x = 'last_name' y = 'Larsen' 我有几个使用该姓氏的用户,但它只显示使用该姓氏的第一个用户。是否可以重复代码,直到我的数据库中没有更多具有该姓氏的用户,然后将它们全部打印出来?
    • 很高兴解决方案奏效了!如果您发现它有帮助,请接受答案(通过标记复选框),如果它回答了您的问题,那么它对社区中的其他人也很有用。欢迎来到 SO!
    • 正在使用的查询对 SQL 注入攻击是开放的。请在生产中使用之前保护它们。
    • 只是一个代码风格建议:您可以使用 str.format() 以避免将查询分成两部分并保持可读性(无 %-转义):query = "SELECT first_name FROM information WHERE {column} = %s".format(column=x)
    猜你喜欢
    • 2016-09-02
    • 2019-11-28
    • 1970-01-01
    • 2012-09-16
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2017-02-09
    • 2020-07-26
    相关资源
    最近更新 更多