首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用表名作为给定参数构建SQL查询字符串

使用表名作为给定参数构建SQL查询字符串
EN

Stack Overflow用户
提问于 2022-01-10 11:39:02
回答 1查看 637关注 0票数 1

我试图在SQL中使用字符串格式。但是在传入变量时,这些变量是用引号插入的,并破坏了语法。

示例

这里,我试图将表名传递给函数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def see_results(cur, table):
    print("complete")
    cur.execute(''' SELECT * from %s ''', (table,))
    results = cur.fetchall()
    print(results)

问题

如果我将"temp_yellow_pages"作为参数传递,则结果查询是:''' SELECT * from "temp_yellow_pages" '''。这个破了。

我想不出一种将任何东西分配给变量table而不使用"的方法,因为query = temp_yellow_pages也会中断。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-10 12:29:33

字符串构建(易于SQL注入)

什么赫尔伍德

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def selectFrom(table):
    return 'SELECT * FROM ' + table


def see_results(cur, table):
    print("complete")
    cur.execute(selectFrom(table))
    results = cur.fetchall()
    print(results)

甚至直接使用f字符串cur.execute(f"SELECT * FROM {table}"

但是,如果传递的参数table中有恶意输入,比如附加的DROPTRUNCATE语句( statement ),怎么办?

查询构建(更安全)

使用https://pypi.org/project/psycopg/之类的具有SQL功能的库( safe或https://pypi.org/project/psycopg/),您可以使用应用输入验证的安全方法来构建SQL。

请参阅模块psycopg2.sql中的示例,以便为给定的表参数组合SQL-语句。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from psycopg2 import sql

cur.execute(
    sql.SQL("SELECT * FROM {} WHERE values IN (%s, %s)")
        .format(sql.Identifier('my_table')),
    [10, 20])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70658045

复制
相关文章
django 组装表名查询数据(动态表名、组合表名)
教程:https://www.runoob.com/python/python-func-getattr.html
卓越笔记
2023/02/18
2K0
MySQL使用SQL语句修改表名
rename table这个SQL语句来修改表名的基本语法是: RENAME TABLE <旧表名> TO <新表名>;
全栈程序员站长
2022/08/23
6.9K0
mybatis 表名做为参数
mybatis传递参数有两种方式 #{param} 这种传递的是带双引号的变量 ${param} 这种传滴的是字面量 比如 tab = tb_user select * from #{tab} 就会被解释成 select * from 'tb_user' 这样肯定是不对的,sql语句中的表不应该加双引号 所以应该写成 select * from ${tab} ${}会直接翻译不加引号,就会解释成正确的sql语句 select * from tb_user
Meet相识
2018/09/12
1.6K0
oracle可以更改表名,sql – 更改Oracle表名
CONSTRAINT ORDER_SOURCE_PK PRIMARY KEY(OS_ID)
全栈程序员站长
2022/08/30
1.8K0
SQL参数化查询
一个简单理解参数化查询的方式是把它看做只是一个T-SQL查询,它接受控制这个查询返回什么的参数。通过使用不同的参数,一个参数化查询返回不同的结果。要获得一个参数化查询,你需要以一种特定的方式来编写你的代码,或它需要满足一组特定的标准。 有两种不同的方式来创建参数化查询。第一个方式是让查询优化器自动地参数化你的查询。另一个方式是通过以一个特定方式来编写你的T-SQL代码,并将它传递给sp_executesql系统存储过程,从而编程一个参数化查询。 这样的解释还是有点模糊,先看一例:
全栈程序员站长
2022/08/31
2.3K0
使用Java根据表名导出与导入Sql
很粗糙啊,有很多可以优化的地方,而且也不安全,但是临时用还是OK的,我这个是公司里面的单机软件,不联网。
程序员朱永胜
2023/08/17
2350
使用Java根据表名导出与导入Sql
如何使用calcite构建SQL并执行查询
大家好,这是 Calcite 的第二篇文章了,我一直毫不掩饰对她的喜爱,而且一直在致力于为社区做一些贡献,如果你也喜欢这个项目的话,欢迎评论,转发,如果没看过第一篇的话,也欢迎移步去看看(手把手教你使用Calcite查看SQL执行计划)。如果你还不了解这个项目的话,我也希望能通过我,让你知道这个优秀的项目。
麒思妙想
2023/08/28
1.1K0
如何使用calcite构建SQL并执行查询
Oracle sql语句修改表名
create table xintable as select * from oldTable;//在原表的基础上建立新表
全栈程序员站长
2022/08/30
1.4K0
查询数据库用户所有表名_sql语句收回用户权限
在企业系统中经常会使用到给用户分配权限的情况,往往在用户信息表和权限表之间还维护了一张角色表,即通过给用户添加角色,角色添加权限的这样一种方式来给用户间接的添加权限。
全栈程序员站长
2022/09/27
1.6K0
查询数据库用户所有表名_sql语句收回用户权限
SQL的单表查询
create database mydb1; Create database mydb2 character set gbk; Create database mydb3 character set gbk COLLATE gbk_chinese_ci;
全栈程序员站长
2021/07/22
2.2K0
SQL三表连接查询
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/135565.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/18
2.1K0
SQL之单表查询
附上下面要用到的数据库和表的 SQL 语句,在数据库管理页面新建一个查询然后使用 CV 大法转移过去执行即可:
wsuo
2020/07/30
1.8K0
sql查询数据库中所有表名_使用权和所有权的区别
由于Oralce没有库名,只有表空间,所以Oracle没有提供数据库名称查询支持,只提供了表空间名称查询。
全栈程序员站长
2022/11/09
1.6K0
SQL数据查询之——单表查询
一、SQL数据查询的一般格式 数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据查询,其一般格式为: SELECT [ALL | DISTINCT]<目标列表达式>[,<目标列表达式>]··· FROM<表名或视图名>[,<表名或视图名>···] | (SELECT语句>)[AS]<别名> [WHERE<条件表达式>] [GROUP BY<列名1>[HAVING<条件表达式>]] [ORDER BY<列名2>[ASC | DESC]]; 整个SELECT语句的含义是,根据WHERE子句的条件表
Zoctopus
2018/06/04
1.8K0
sql server 连接查询_连表查询语句
连接查询包括合并、内连接、外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要。
全栈程序员站长
2022/10/05
3.4K0
SQL数据查询之——单表查询
数据查询是数据库的核心操作。SQL提供了SELECT语句进行数据查询,其一般格式为:
Twcat_tree
2022/11/30
1.7K0
用SQL查询Oracle数据库名和实例名
文章目录 1. 查看数据库名 2. 查看实例名 1. 查看数据库名 select name from v$database; 更详细点的话,就执行这个(注意,这个必须在命令行界面执行)。 desc
bboy枫亭
2020/09/22
2.3K0
Sql Server 的参数化查询
为什么要使用参数化查询呢?参数化查询写起来看起来都麻烦,还不如用拼接sql语句来的方便快捷。当然,拼接sql语句执行查询虽然看起来方便简洁,其实不然。远没有参数化查询来的安全和快捷。
小世界的野孩子
2019/09/11
3.9K0
Sql Server 的参数化查询
使用Spark SQL构建交互式查询引擎
StreamingPro 原来仅仅是用来作为Spark Streaming的一个配置化+SQL封装,然而不经意间,已经涵盖了批处理,交互式查询等多个方面。今天就讲讲如何使用StreamingPro构建一个交互式查询引擎。
用户2936994
2018/08/27
2.3K0
使用Spark SQL构建交互式查询引擎
Oracle 查询表空间使用率 SQL 语句
Oracle 数据库的表空间如果使用超过100%,会导致数据库无法使用,因此需要及时扩展!
Lucifer三思而后行
2021/09/14
1.6K0

相似问题

在SQL中使用整个查询作为表名

21

在SQL查询中使用变量作为表名

10

从给定表作为参数的Prisma查询

119

使用php参数构建sql查询字符串

12

SQL使用变量作为表名

22
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文