身份证 | 单位 | 克 | 公里 |
---|---|---|---|
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)
我可以定义一个字符串来执行选择列吗? 就我而言,按照单位定义采用哪个单位列并写入表。谢谢你。
是的 - 但 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 注入尝试。当您在调用之前插入数据时,您必须注意这一点。通常这些数据来自受控环境,但例如,如果列名来自某些不受信任的输入,则您必须自己进行转义。