如何使用python在sqlplus中插入带有'&'的值

Posted

技术标签:

【中文标题】如何使用python在sqlplus中插入带有\'&\'的值【英文标题】:How to insert a value with '&' in sqlplus with python如何使用python在sqlplus中插入带有'&'的值 【发布时间】:2016-01-16 17:47:30 【问题描述】:
import urllib
import requests
from bs4 import *
from subprocess import Popen,PIPE
import os

connectString = 'SYSTEM/mediadot123'

def runSqlQuery(sqlCommand, connectString):
   session = Popen(['sqlplus', '-S', connectString], stdin=PIPE, stdout=PIPE, stderr=PIPE)
   session.stdin.write(sqlCommand)
   return session.communicate()


session = Popen(['C:\\app\khize_000\product\\11.2.0\dbhome_1\BIN\sqlplus.exe','-S','hr/hr'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = session.communicate()

sqlCommand = "set define off;"
queryResult, errorMessage = runSqlQuery(sqlCommand, connectString)
print queryResult

titledb = "retrieved from somewhere else with & in it"

sqlCommand = "insert into food(title) values ('" + str(titledb.encode('utf-8')) + "');"
queryResult, errorMessage = runSqlQuery(sqlCommand, connectString)
print queryResult

我在 oracle 网站上看到了“设置定义关闭”查询,但它对我的代码不起作用。它在命令行中工作,但不在此处。它给了我以下错误:

培根土豆鸡蛋砂锅早餐

输入鸡蛋的值:

SP2-0546:检测到用户请求的中断或 EOF。

【问题讨论】:

import cx_Oracle 然后使用准备好的语句。 【参考方案1】:

set define off 命令不会在 SQLPlus 会话之间持续存在。每次调用runSQLQuery 时,您都会打开一个新的SQLPlus 实例。您需要在与实际插入命令相同的会话中执行 set define off 才能达到预期效果。

如果您确信在此上下文中永远不需要替换功能,您可以在发送作为参数传递的语句之前,在runSQLQuery 函数中将其作为命令发送到 SQLPlus。

您可以重新设计整个逻辑以保持单个 SQLPlus 会话处于打开状态并向其写入多个命令。

或者,您可以找到一个合适的库,用于从 Python 直接连接到 Oracle,而不是执行外部 SQLPlus 进程。

【讨论】:

sqlCommand = "set define off;插入 food(title) 值 ('" + str(titledb.encode('utf-8')) + "');" queryResult, errorMessage = runSqlQuery(sqlCommand, connectString) print queryResult 我也试过这种方式,但仍然报同样的错误。 当然,因为您仍在发送一行,并且 SQLplus 在尝试实际执行之前首先解析该行以查找替换变量,这就是导致问题的原因。您需要编写模拟交互方式的代码 - 输入“set define off”,按 Enter,然后输入插入命令。 我试过这个:sqlcommand = "set define off;\n insert into......" 它奏效了.. 非常感谢

以上是关于如何使用python在sqlplus中插入带有'&'的值的主要内容,如果未能解决你的问题,请参考以下文章

SQLPlus:在脚本中使用特殊字符作为密码

如何使用 cx_Oracle 在 Python 中返回 SQLPLUS 变量

如何在字段中插入带有字符[']的表(pymssql)

插入记录时 SQLPlus 命令行脚本挂起

SQLPlus 在插入时删除 clob 字段中的尾随空格

如何从 Sqlplus 输出中删除下划线