通过 python informixdb 寻找 Informix 的 SQL 插入语法

Posted

技术标签:

【中文标题】通过 python informixdb 寻找 Informix 的 SQL 插入语法【英文标题】:looking for SQL insert syntax for informix via python informixdb 【发布时间】:2011-12-14 16:27:42 【问题描述】:

无法使用 python informixdb 找到正确的 INSERT 查询语法

python 2.6.6 python INFORMIXDB 2.5 版 驱动程序名称:IBM Informix-ESQL 驱动版本:3.50.FC8 关于 debian 压缩

这是文档 - http://informixdb.sourceforge.net/manual.html#binding-parameters

>>> cursor.execute('INSERT INTO names VALUES(:first,:last,:age)',
...                dict(first='some', last='body', age=56) )

所以我试了一下

 cursor.execute('INSERT INTO transit_auftrag_i VALUES(:auftragskey,:transitkunde,:status)',dict(auftragskey='erII',transitkunde='DMIeLE',status='OK') )

这就是我在这个例子中得到的

<class '_informixdb.ProgrammingError'>
('PREPARE', -236, ['message': 'Insert value list does not match column list', 'sqlstate': '21S01'])
<class '_informixdb.ProgrammingError'>
('DESCRIBE', -410, ['message': 'Syntax error or access violation in PREPARE or EXECUTE IMMEDIATE', 'sqlstate': '37000'])
Segmentation fault

任何提示我可以尝试吗?

更新:informix 11.50.xC8

更新

到目前为止,谢谢。我现在执行以下查询,它运行时没有错误,但也没有来自游标的消息,也没有插入任何内容。如果您有建议,那就太好了。

cursor.execute("INSERT INTO transit_auftrag_i (auftragskey,transitkunde,status) VALUES (:a,:b,:c)", dict(a='A',b='B',c='C') )

【问题讨论】:

看来我明白了。我需要设置 conn.autocommit = True 【参考方案1】:

您应该明确列出要填充的列:

INSERT INTO names (firstname, lastname, age) VALUES (:first,:last,:age)

显然您的表格中的列比您提供的多,或者它们的顺序不同。

不说明INSERT 语句的列是一个不好的编程习惯,你应该尽快改掉

【讨论】:

我假设部分(:auftragskey,:transitkunde,:status)是我的专栏列表!!?我会试试的 不,这些是列的值(这就是为什么它在 VALUES 部分中)并且 dict() 部分指的是 parameter 名称,而不是 列名称【参考方案2】:

如果您的数据库表有很多列,请考虑创建一个包含枚举类型的类,并按名称引用这些列。在 1 1/2 年前我们的 AMR 项目开始时,我尝试仅使用 20+ 列表(来自供应商的数据输入)上的索引号来引用列;这是一场灾难,直到我创建了一个类。

以下适用于 Python 2.6.5。

premid = mapErtToPremId(ins_row[d.DeviceID], ins_row[d.DeviceType], ins_row[d.ChannelNumber], db)


class drIdx():
    def __init__(self):
        self.MeterID = 0
        self.Reading = 1
        self.ReadingDateTime = 2
        self.Account = 3
        self.CustomerLN = 4
        self.CustomerFN = 5
        self.DeviceID = 6
        self.DeviceType = 7
        self.ChannelNumber = 8
        self.DecodeType = 9
        self.LoadDateLocal = 10
        self.PremiseID = 11

【讨论】:

以上是关于通过 python informixdb 寻找 Informix 的 SQL 插入语法的主要内容,如果未能解决你的问题,请参考以下文章

Informixdb 多连接

使用 informixdb 连接时的 SQLCODE -1829

使用sqlalchemy的informix DB的Python数据库连接

在 Windows 上使用 pyodbc 连接到 Informix

在 informix DB 中是不是定义了任何 alpha 逻辑

通过 python opencv 寻找齿轮的牙齿