0

seq_data次のようなpostgresテーブルがあります。

data_id | machine |     run      | cell  | run_start  | library |                   expected_dir                    | transferred | failed | cloud | csv_uploaded |         last_updated          
---------+---------+--------------+-------+------------+---------+---------------------------------------------------+-------------+--------+-------+--------------+-------------------------------
       1 | rsii_1  | RUN001     | B01_1 | 2020-02-05 | N/A      |                some/dir                            | t           | f      | t     | t            | 2020-02-07 11:24:17.279879+00
       2 | rsii_1  | RUN001     | C01_1 | 2020-02-05 | N/A      |                some/dir                            | t           | f      | t     | t            | 2020-02-07 11:24:17.279879+00

私がやろうとしているのは、列ライブラリを更新することです。

私が行った場合:

data_monitor=> UPDATE seq_data SET failed=TRUE WHERE data_id=2;
UPDATE 1

それは動作し、私は得ます:

data_id | machine |     run      | cell  | run_start  | library |                   expected_dir                    | transferred | failed | cloud | csv_uploaded |         last_updated          
---------+---------+--------------+-------+------------+---------+---------------------------------------------------+-------------+--------+-------+--------------+-------------------------------
       1 | rsii_1  | RUN001     | B01_1 | 2020-02-05 | N/A      |                some/dir                            | t           | f      | t     | t            | 2020-02-07 11:24:17.279879+00
       2 | rsii_1  | RUN001     | C01_1 | 2020-02-05 | N/A      |                some/dir                            | t           | t      | t     | t            | 2020-02-07 11:24:17.279879+00

しかし、私がするとき:

data_monitor=> UPDATE seq_data SET library=this_library WHERE data_id=1;
ERROR:  column "this_library" does not exist
LINE 1: UPDATE seq_data SET library=this_library WHERE data_id=1;

私が実際にやりたいのは、に基づいlibraryて編集することです。runcellmachine

data_monitor=> UPDATE seq_data SET library=this_library WHERE machine=rsii_1 and run=RUN001 and cell=B01_1;
ERROR:  column "rsii_1" does not exist
LINE 1: ...E seq_data SET library=this_library WHERE machine=rsii_1 and...

なぜこうなった?

UPDATE seq_data SET library=this_library WHERE machine=rsii_1 and run=RUN001 and cell=B01_1;列をスキップして混乱しているようでlibrary、実際には列名が値であると考えて、this_library

バージョン: postgresql-11

そして、これが私がテーブルを作成した方法です:

CREATE TABLE seq_data (
    data_id serial NOT NULL,
    machine varchar(10) NOT NULL,
    run varchar(30) NOT NULL,
    cell varchar(10) NOT NULL,
    run_start date NOT NULL,
    library varchar(25) NOT NULL DEFAULT 'N/A',
    expected_dir varchar(100),
    transferred boolean NOT NULL DEFAULT 'f',
    failed boolean NOT NULL DEFAULT 'f',
    cloud boolean NOT NULL DEFAULT 'f',
    csv_uploaded boolean NOT NULL DEFAULT 'f',
    last_updated timestamp with time zone DEFAULT now(),
    PRIMARY KEY (data_id),
    CONSTRAINT data_id UNIQUE (machine, run, cell)
);

アップデート

Python3.7 で psycopg2 を使用

dbconn.query(
'''UPDATE seq_data
   SET library=%s
   WHERE run=%s and machine=%s and cell=%s;''',
   (sample_name[1], run, machine, sample_name[0],), commit=True)

Pythonでこれらを引用符で囲むにはどうすればよいですか? すべての変数はすでに文字列です。

4

0 に答える 0