使用 psycopg2 将数据从 python 写入 postgreSQL 时遇到问题
Trouble writing data from python to postgreSQL with psycopg2
我正在尝试使用 psycopg2
将数据从 python shell 插入到 postgresql 数据库中。我正在尝试将以下数据库迁移到本地 postgreSQL 文件:http://www3.inegi.org.mx/sistemas/mapa/denue/default.aspx。工作流的简化示例如下所示:
import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
DB_CONN_INEGI = 'host=localhost user=postgres password=password port=5432 dbname=inegi'
conn = psycopg2.connect(DB_CONN_INEGI)
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = conn.cursor()
然后我执行此命令以将一些值插入 table:
cursor.execute("INSERT INTO denoue VALUES %s;" % tmp)
这执行得很好,但是当我检查记录数时:
cursor.execute('SELECT COUNT(*) FROM denoue;')
这个returns没什么(None
)。我可以 运行 一遍又一遍地调用上面的方法,但结果总是一样的——似乎没有数据被添加到 table。
我是不是遗漏了什么明显的东西?抱歉缺少一个快速工作的示例——我可以尝试在本地数据库上快速模拟一个 运行s,如果这在这里有用的话。
tmp
看起来像这样:
"(40740, 'ZONA MILITAR', 'SECRETAR\xc3\x8dA DE LA DEFENSA NACIONAL', 931410, 'Impartici\xc3\xb3n de justicia y mantenimiento de la seguridad y el orden p\xc3\xbablico', '11 a 30 personas', 'CALLE', 'R\xc3\x8dO LERMA', 'CALLE', 'R\xc3\x8dO SENA', 'CALLE', 'R\xc3\x8dO \xc3\x89UFRATES', 'CALLE', 'R\xc3\x8dO LERMA', 100.0, 'null', 'null', 'null', 'null', 'null', 'FRACCIONAMIENTO', 'COLINAS DEL R\xc3\x8dO', 'null', 'null', 'null', 20010.0, 1, 'AGUASCALIENTES', 1, 'AGUASCALIENTES', 1, 'Aguascalientes', '2013', 25, 'null', 'null', 'null', 'Fijo', 21.89341096, -102.32335734, 'DICIEMBRE 2014')"
cursor.execute('SELECT COUNT(*) FROM denoue;')
这实际上会执行查询和 return None
。要获取查询结果,应该使用fetchone()
方法:
results_count = cursor.fetchone()[0]
我正在尝试使用 psycopg2
将数据从 python shell 插入到 postgresql 数据库中。我正在尝试将以下数据库迁移到本地 postgreSQL 文件:http://www3.inegi.org.mx/sistemas/mapa/denue/default.aspx。工作流的简化示例如下所示:
import psycopg2
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
DB_CONN_INEGI = 'host=localhost user=postgres password=password port=5432 dbname=inegi'
conn = psycopg2.connect(DB_CONN_INEGI)
conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cursor = conn.cursor()
然后我执行此命令以将一些值插入 table:
cursor.execute("INSERT INTO denoue VALUES %s;" % tmp)
这执行得很好,但是当我检查记录数时:
cursor.execute('SELECT COUNT(*) FROM denoue;')
这个returns没什么(None
)。我可以 运行 一遍又一遍地调用上面的方法,但结果总是一样的——似乎没有数据被添加到 table。
我是不是遗漏了什么明显的东西?抱歉缺少一个快速工作的示例——我可以尝试在本地数据库上快速模拟一个 运行s,如果这在这里有用的话。
tmp
看起来像这样:
"(40740, 'ZONA MILITAR', 'SECRETAR\xc3\x8dA DE LA DEFENSA NACIONAL', 931410, 'Impartici\xc3\xb3n de justicia y mantenimiento de la seguridad y el orden p\xc3\xbablico', '11 a 30 personas', 'CALLE', 'R\xc3\x8dO LERMA', 'CALLE', 'R\xc3\x8dO SENA', 'CALLE', 'R\xc3\x8dO \xc3\x89UFRATES', 'CALLE', 'R\xc3\x8dO LERMA', 100.0, 'null', 'null', 'null', 'null', 'null', 'FRACCIONAMIENTO', 'COLINAS DEL R\xc3\x8dO', 'null', 'null', 'null', 20010.0, 1, 'AGUASCALIENTES', 1, 'AGUASCALIENTES', 1, 'Aguascalientes', '2013', 25, 'null', 'null', 'null', 'Fijo', 21.89341096, -102.32335734, 'DICIEMBRE 2014')"
cursor.execute('SELECT COUNT(*) FROM denoue;')
这实际上会执行查询和 return None
。要获取查询结果,应该使用fetchone()
方法:
results_count = cursor.fetchone()[0]