簡體   English   中英

如何在 IBM 的 DB2 中使用 id 作為主鍵

[英]How do I work with ids as a primary key in IBM'S DB2

我有一個需要注冊帳戶的 flask 服務器。 此帳戶將有一個 ID 作為主鍵。 我將主鍵設置為

usr_id INTEGER NOT NULL PRIMARY KEY GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1)

當我嘗試將信息保存到數據庫(使用python)時,我嘗試

save_data = 'INSERT INTO myTable(name, email, psw) VALUES(?, ?, ?)'
        param = name, email, psw #these are python vars
        stmt = ibm_db.prepare(conn, save_data)#conn is the connection to db2 in python
        ibm_db.execute(stmt, param)

我的問題是,“myTable”具有自動遞增的用戶 ID。 當我第一次嘗試注冊時,我收到一個錯誤,說我提供的值太少。 我認為缺少的是用戶 ID,所以我指定了我給出的值,如上面的代碼所示。 現在我得到一個新的錯誤。 我不明白我應該怎么做才能讓 db2 生成數字,我不確定該錯誤是否仍然與我談到的缺失值有關

我在終端中收到的錯誤消息是

Exception: Statement Execute Failed: [IBM][CLI Driver][DB2/LINUXX8664] SQL0302N  The value of a host variable in the EXECUTE or OPEN statemen SQLCODE=-302ange for its corresponding use.  SQLSTATE=22001

使用如下定義的表:

create table so.my_table(id int not null primary key generated always as identity, 
                         name varchar(10), 
                         email varchar(20), 
                         psw varchar(16))";

這很好用:

save_data_sql = 'insert into so.my_table(name, email, psw) values(?, ?, ?)'
params = 'kkuduk', 'kkuduk@ibm', 'strongPassword'
stmt = ibm_db.prepare(conn, save_data_sql)
ibm_db.execute(stmt, params)

IE

In [16]: ibm_db.execute(stmt, params)
In [17]: stmt = ibm_db.exec_immediate(conn,"select * from  so.my_table")
In [18]: result = ibm_db.fetch_assoc(stmt)
In [19]: result
Out[19]: {'ID': 1, 'NAME': 'kkuduk', 'EMAIL': 'kkuduk@ibm', 'PSW': 'strongPassword'}

另一種選擇是逐個綁定參數

stmt = ibm_db.prepare(conn, save_data_sql)
ibm_db.bind_param(stmt, 1, 'kkuduk')
ibm_db.bind_param(stmt, 2, 'kkuduk@ibm')
ibm_db.bind_param(stmt, 3, 'strongPassword')
ibm_db.execute(stmt)

可能會返回錯誤 SQL0302N,例如,如果我嘗試為范圍輸出一個值,那么問題可能不是您的usr_id列,而是您實際嘗試顯式插入的 3 個列之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM