Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:如何以字符串形式输入SQL查询而不出错?_Python - Fatal编程技术网

Python:如何以字符串形式输入SQL查询而不出错?

Python:如何以字符串形式输入SQL查询而不出错?,python,Python,我正在创建一个处理SQL查询的程序。目前它非常简单,我只想定义一个变量,其中包含一个字符串形式的SQL语句 例如 str=“选择不同的 光伏项目id, gps.U名称, 全球定位系统。周期为年, rbse.resource\u source\u id, rbse.alias作为资源名称, 解码(pjo计划版本utils.get时间阶段代码(pv.plan版本id),'G', pld.数量,pjo\ U计划\版本\使用\分摊\金额('L',pld.开始\日期,pld.结束\日期,gps.开始\日期

我正在创建一个处理SQL查询的程序。目前它非常简单,我只想定义一个变量,其中包含一个字符串形式的SQL语句

例如

str=“选择不同的
光伏项目id,
gps.U名称,
全球定位系统。周期为年,
rbse.resource\u source\u id,
rbse.alias作为资源名称,
解码(pjo计划版本utils.get时间阶段代码(pv.plan版本id),'G',
pld.数量,pjo\ U计划\版本\使用\分摊\金额('L',pld.开始\日期,pld.结束\日期,gps.开始\日期,gps.结束\日期,pld.数量)
)随着时间的推移,
(131.4-pld.数量)/131.4未分配百分比
从…起
pjf_rbs_元素rbse,
总账周期状态gps,
pjo_平面图_线_详图pld,
pjo_规划_元素pe,
pjo计划版本vl pv,
pjo_平面图_类型_vl pt
哪里
1=1
和pe.rbs\u element\u id=rbse.rbs\u element\u id
pld.planning\u element\u id=pe.planning\u element\u id
和pv.plan\u version\u id=pe.plan\u version\u id
和pv.current_plan_status_flag='Y'
和((gps.start_date=pld.start_date))
和gps.adjustment\u period\u flag='N'
和gps.application_id=10037
pv.plan\U type\U id=pt.plan\U type\U id
和pt.plan_type_code='PROJECT_plan''

我得到了无效的语法错误,所以我显然没有正确定义它。最好的方法是什么?为了深入了解,脚本将分析str以识别表和列,并返回与列表匹配的任何内容

字符串连接不正确

试着这样做:

str = "line1" \
      "line2" \
      "line3" 

#output : no spaces or new lines
line1line2line3
或者(但不能通过以下方式缩进,如果缩进,缩进将成为连接的一部分)


您的字符串连接不正确

试着这样做:

str = "line1" \
      "line2" \
      "line3" 

#output : no spaces or new lines
line1line2line3
或者(但不能通过以下方式缩进,如果缩进,缩进将成为连接的一部分)


多行中的字符串,因此需要使用三重引号,否则将获得下线。另外,您不应该命名变量
str
,因为它已经是一个函数了

string = """SELECT DISTINCT 
pv.project_id,
gps.period_name,
gps.period_year,
rbse.resource_source_id,
rbse.alias as resource_name,
DECODE(pjo_plan_version_utils.get_time_phased_code(pv.plan_version_id), 'G', 
       pld.quantity, pjo_plan_version_utils.spread_amount('L', pld.start_date, pld.end_date, gps.start_date, gps.end_date, pld.quantity)
) as hours,
(131.4-pld.quantity)/131.4 unallocated_percentage
FROM
    pjf_rbs_elements rbse,
    gl_period_statuses gps,
    pjo_plan_line_details pld,
    pjo_planning_elements pe,
    pjo_plan_versions_vl pv,
    pjo_plan_types_vl pt
WHERE
    1=1
    AND pe.rbs_element_id = rbse.rbs_element_id 
    AND pld.planning_element_id = pe.planning_element_id 
    AND pv.plan_version_id = pe.plan_version_id
    AND pv.current_plan_status_flag = 'Y'
    AND ((gps.start_date <= pld.end_date)
    AND (gps.end_date >= pld.start_date))
    AND gps.adjustment_period_flag = 'N'
    AND gps.application_id = 10037
    AND pv.plan_type_id = pt.plan_type_id
    AND pt.plan_type_code = 'PROJECT_PLAN'"""
string=“”选择不同的
光伏项目id,
gps.U名称,
全球定位系统。周期为年,
rbse.resource\u source\u id,
rbse.alias作为资源名称,
解码(pjo计划版本utils.get时间阶段代码(pv.plan版本id),'G',
pld.数量,pjo\ U计划\版本\使用\分摊\金额('L',pld.开始\日期,pld.结束\日期,gps.开始\日期,gps.结束\日期,pld.数量)
)随着时间的推移,
(131.4-pld.数量)/131.4未分配百分比
从…起
pjf_rbs_元素rbse,
总账周期状态gps,
pjo_平面图_线_详图pld,
pjo_规划_元素pe,
pjo计划版本vl pv,
pjo_平面图_类型_vl pt
哪里
1=1
和pe.rbs\u element\u id=rbse.rbs\u element\u id
pld.planning\u element\u id=pe.planning\u element\u id
和pv.plan\u version\u id=pe.plan\u version\u id
和pv.current_plan_status_flag='Y'
和((gps.start_date=pld.start_date))
和gps.adjustment\u period\u flag='N'
和gps.application_id=10037
pv.plan\U type\U id=pt.plan\U type\U id
和pt.plan_type_code='PROJECT_plan''

多行中的字符串,因此您需要使用三重引号,否则将获得下线。另外,您不应该命名变量
str
,因为它已经是一个函数了

string = """SELECT DISTINCT 
pv.project_id,
gps.period_name,
gps.period_year,
rbse.resource_source_id,
rbse.alias as resource_name,
DECODE(pjo_plan_version_utils.get_time_phased_code(pv.plan_version_id), 'G', 
       pld.quantity, pjo_plan_version_utils.spread_amount('L', pld.start_date, pld.end_date, gps.start_date, gps.end_date, pld.quantity)
) as hours,
(131.4-pld.quantity)/131.4 unallocated_percentage
FROM
    pjf_rbs_elements rbse,
    gl_period_statuses gps,
    pjo_plan_line_details pld,
    pjo_planning_elements pe,
    pjo_plan_versions_vl pv,
    pjo_plan_types_vl pt
WHERE
    1=1
    AND pe.rbs_element_id = rbse.rbs_element_id 
    AND pld.planning_element_id = pe.planning_element_id 
    AND pv.plan_version_id = pe.plan_version_id
    AND pv.current_plan_status_flag = 'Y'
    AND ((gps.start_date <= pld.end_date)
    AND (gps.end_date >= pld.start_date))
    AND gps.adjustment_period_flag = 'N'
    AND gps.application_id = 10037
    AND pv.plan_type_id = pt.plan_type_id
    AND pt.plan_type_code = 'PROJECT_PLAN'"""
string=“”选择不同的
光伏项目id,
gps.U名称,
全球定位系统。周期为年,
rbse.resource\u source\u id,
rbse.alias作为资源名称,
解码(pjo计划版本utils.get时间阶段代码(pv.plan版本id),'G',
pld.数量,pjo\ U计划\版本\使用\分摊\金额('L',pld.开始\日期,pld.结束\日期,gps.开始\日期,gps.结束\日期,pld.数量)
)随着时间的推移,
(131.4-pld.数量)/131.4未分配百分比
从…起
pjf_rbs_元素rbse,
总账周期状态gps,
pjo_平面图_线_详图pld,
pjo_规划_元素pe,
pjo计划版本vl pv,
pjo_平面图_类型_vl pt
哪里
1=1
和pe.rbs\u element\u id=rbse.rbs\u element\u id
pld.planning\u element\u id=pe.planning\u element\u id
和pv.plan\u version\u id=pe.plan\u version\u id
和pv.current_plan_status_flag='Y'
和((gps.start_date=pld.start_date))
和gps.adjustment\u period\u flag='N'
和gps.application_id=10037
pv.plan\U type\U id=pt.plan\U type\U id
和pt.plan_type_code='PROJECT_plan''

将每个双引号替换为3个单引号,同时将参数名称
str
更改为maybe
query\u str
,因为python已经使用了
str
。将每个双引号替换为3个单引号,并将参数名称
str
更改为maybe
query\u str
,python已经使用了as
str