【问题标题】:To insert to Pg by Psycopg通过 Psycopg 插入 Pg
【发布时间】:2010-12-19 05:42:34
【问题描述】:

如何修复 Python 中的 SQL 语句?

数据库连接有效。但是,cur.execute 返回 none 这是错误的。

我的代码

import os, pg, sys, re, psycopg2

try:
   conn = psycopg2.connect("dbname='tk' host='localhost' port='5432' user='naa' password='123'")
except: print "unable to connect to db"
cur = conn.cursor()

print cur.execute("SELECT * FROM courses")     # problem here

Psql 中的 SQL 命令返回正确的输出。 我可以类似地在 Psql 中运行INSERT,但不能通过 Python 的脚本。 我没有收到 /var/log 的警告/错误。

可能的错误是

  1. cursor(),不过似乎是对的
  2. connect()方法的语法,似乎还可以

【问题讨论】:

    标签: python postgresql psycopg


    【解决方案1】:

    您必须调用cur 上的fetch 方法之一(fetchone、fetchmany、fetchall)才能真正获得查询结果。

    您可能应该阅读tutorialDB-API

    【讨论】:

    • 您需要运行哪种方法将数据放入数据库? cur.insert("INSERT INTO courses (course) VALUES ( %s )""", [data]) 不适合我。
    • 检查psycopg.paramstyle 以查看您应该在该模块中使用哪种参数化样式;不幸的是,DB-API 允许多种可能性,而不是标准化一种。我认为 psycopg 应该使用'pyformat',在这种情况下cur.execute('INSERT INTO courses (course) VALUES(%(course)s)', {'course': var}) 将是语法。
    • “不工作”有点含糊 - 它会引发异常吗?此外,我认为 psycopg2 默认不会自动提交(与 psql 不同) - 您需要在插入行后调用 conn.commit() 才能使其对其他会话可见。
    【解决方案2】:

    您必须调用cur.fetchall() 方法(或其他fetch*() 方法之一)才能从查询中获取结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      相关资源
      最近更新 更多