[英]How do I get ibm_db for Node.js to work with DB2 in Mac OS X 10.10?
[英]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.