python - Python打开替换以传递用于在SQL中创建表的变量导致错误“DDL之后只有ET或Null语句合法”
问题描述
我正在尝试将变量传递到多个 Teradata SQL 文件中。当我在文件中没有“创建表”时,我有几个脚本可以完美地执行此操作。当我使用硬编码的变量运行文件时,它们运行得很好,但是当我使用打开/替换函数时,我收到错误“在 ddl 语句之后只有 et 或 null 语句是合法的”。
这告诉我“Open().Replace()”函数是造成这种情况的原因。这似乎导致python并行而不是串行运行SQL脚本,但我不知道如何解释这一点。我尝试在执行光标之外使用打开/替换,但由于变量未更改而出错。我在下面有一些代码示例,这些示例针对这个问题进行了简化。这是我第一次发布问题,所以如果有更好的方法让我这样做,请随时发表评论,以便我进行编辑。
没有变量的 test.sql
create multiset volatile table sdates as (Sel caldt, datesk
from dimdates
where day = 'Mon'
and mth = 'Feb');
ins into vartest (Sel caldt, site, sum(sales)
from fctsales f
join sdates s
on f.datesk = s.datesk);
有效的python代码
query = cur.execute(file = 'test.sql')
带有变量的 test.sql
create multiset volatile table sdates as (Sel caldt, datesk
from dimdates
where day = 'bbbb'
and mth = 'oooo');
ins into vartest (Sel caldt, site, sum(sales)
from fctsales f
join sdates s
on f.datesk = s.datesk);
失败的python代码
bbbb = 'Mon'
oooo = 'Feb'
query = cur.execute(open(file = 'test.sql').read().replace('bbbb',bbbb).replace('oooo',oooo))
DatabaseError: (3932, '[25000] [Teradata][ODBC Teradata Driver][Teradata Database](-3932)Only an ET or null statement is legal after a DDL Statement.')
编辑 1:添加了确切的错误代码
解决方案
推荐阅读
- c++ - 如何导入
使用 avr-gcc - php - 如何修复删除按钮在 Laravel 5.7 中不起作用?
- angular - 角火2。无法读取未定义的属性“订阅”
- php - PHP - 如何不在登录页面上启动会话
- mysql - MySQL Load Data Infile (CSV):替换/删除垂直标签
- excel - 输入 Power BI 之前的数据格式
- c++ - 第一个参数设置为第二个作为默认参数的模板化 C++ 函数
- c# - xUnit 抽象测试类,带有带参数的虚拟测试方法
- c++ - 为什么可变参数宏如此令人不快?
- reactjs - 如何对包含在 memo 和 withStyles 中的 React 组件进行浅层测试?