在PostgreSQL / Python中选择/获取有符号整数

时间:2015-07-29 20:25:11

标签: python postgresql casting tuples psycopg2

我想从表测量的列 measurement_id 中选择并获取整数,否则,我会以某种方式将一项大小的元组转换为有符号整数通过Python的一些后期处理。 我在MySQL中知道这个Selecting/casting output as integer in SQL,其中我的PostgreSQL 9.4的伪代码

CREATE TABLE measurements (
        measurement_id SERIAL PRIMARY KEY NOT NULL,
        measurement_size_in_bytes INTEGER NOT NULL,
        time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP
);  

-- sample data
INSERT INTO measurements (measurement_size_in_bytes) VALUES (77777), (5065), (888);

SELECT CAST(measurement_id AS SIGNED) FROM measurements ORDER BY time desc limit 1;

投射不起作用,甚至不是measurement_id::int。 可能format是正确的工具。 执行print "measurement_id ", _measurement_id;会给出元组((21,)),而它应该只给21

在Python中启动和运行

sudo -u postgres psql detector -f 12.7.2015_creates.sql;
DROP TABLE
CREATE TABLE
$ sudo -u postgres psql detector -c "INSERT INTO measurements (measurement_size_in_bytes) VALUES (77777), (5065), (888);"
INSERT 0 3
$ sudo -u postgres psql detector -c "INSERT INTO measurements (measurement_size_in_bytes) VALUES (77777), (5065), (888);"
INSERT 0 3
$ sudo -u postgres psql detector -c "SELECT measurement_id FROM measurements ORDER BY time desc limit 1";
 measurement_id 
----------------
              7
(1 row)

但在我需要使用数据的Python中做同样的事情

import sys
import os
import struct
import psycopg2
conn_string = "dbname=detector user=postgres password=1234 host=localhost port=5432"
print "Connecting to database\n    ->%s" % (conn_string)     
conn = psycopg2.connect(conn_string)
cursor = connection.cursor()
cursor.execute(
    'SELECT measurement_id FROM measurements ORDER BY time desc limit 1;'
);
_measurement_id = cursor.fetchone();
print "measurement_id ", _measurement_id, " javist!";

返回

Connecting to database
    ->dbname=detector user=postgres password=1234 host=localhost port=5432
measurement_id  (11,)  javist!

我想要打印measurement_id 11 javist!

如何从PostgreSQL / Python中的元组中选择/获取signed int?

操作系统:Debian 8.5
硬件:联想

1 个答案:

答案 0 :(得分:2)

fetchone返回一个元组。得到它的第一个元素:

_measurement_id = cursor.fetchone()[0];