PYTHON 我可以定义一个字符串来执行选择哪一列吗?

问题描述 投票:0回答:1
身份证 单位 公里
1 10 20
2 公里 100 500
    con=sqlite3.connect(database='database.db')
    cur=con.cursor()
    try:
        cur.execute("SELECT ID,Unit FROM Product")
        rows=cur.fetchall()
        for row in rows:
            print(row[1])
            cur.execute("SELECT Unit,? FROM Product WHERE ID=?",(row[1],row[0],))
            rows2=cur.fetchall()
            print(rows2)

我可以定义一个字符串来执行选择列吗? 就我而言,按照单位定义采用哪个单位列并写入表。谢谢你。

python sqlite
1个回答
0
投票

是的 - 但 SQLite Python 连接器上可用的字符串替换不会替换列名称:它仅用于数据占位符。

要使用动态列或表名称(或 SQL 语法中的任何其他动态),只需在调用

cur.execute
之前使用其他机制格式化字符串。

例如,使用 f 弦:

    con=sqlite3.connect(database='database.db')
    cur=con.cursor()
    try:
        cur.execute("SELECT ID,Unit FROM Product")
        rows=cur.fetchall()
        for row in rows:
            print(row[1])
            #this will interpolate "row[1]" and then call execute to interpolate the ID value;
            cur.execute(f"SELECT Unit,{row[1]} FROM Product WHERE ID=?",(row[0],))
            rows2=cur.fetchall()
            print(rows2)

请记住,使用 SQL 连接器插值时,它会自动转义数据,从而避免任何 SQL 注入尝试。当您在调用之前插入数据时,您必须注意这一点。通常这些数据来自受控环境,但例如,如果列名来自某些不受信任的输入,则您必须自己进行转义。

© www.soinside.com 2019 - 2024. All rights reserved.