【问题标题】:Quotations not working in PostgreSQL Queries引用在 PostgreSQL 查询中不起作用
【发布时间】:2015-10-20 23:24:14
【问题描述】:

我有下表

创建表播放器(name varchar(30), playerid 序列主键);

我正在使用脚本:
def registerPlayer(name):
    """注册新玩家。"""
    db = psycopg2.connect("dbname=tournament")
    c = db.cursor()
    player = "插入玩家值 (%s);"
    score = "插入分数(获胜,匹配)值 (0, 0);"
    c.execute(玩家,(名称,))
    c.执行(分数)
    db.commit()
    db.close()

但是,当我尝试使用引号中的参数注册玩家时:
registerPlayer("Any Name")

不行...现在,如果我直接将查询输入到psql中,如果我只使用单引号就可以了

INSERT INTO player VALUES ('Any Name');

但如果我使用“任何名称”则不会。如果我使用“”,它会告诉我:

错误:“任何名称”列不存在

现在,如果我想输入 Bob O'Neal 这样的名字,这是一个问题,因为它会在 O 之后关闭该条目。

前几天引号工作正常,我去格式化,以便所有 SQL 查询都大写,一切都停止工作。我返回了运行良好的代码,但现在没有任何工作!

【问题讨论】:

标签: python sql database postgresql


【解决方案1】:

SQL 中的双引号不是字符串 - 它们转义表、索引和其他对象名称(例如,"John Smith" 指的是名为 John Smith 的表)。只有单引号字符串才是真正的字符串。

在任何情况下,如果您正确使用查询参数(在您的示例代码中,您似乎是这样),您不必担心转义数据。只需将原始值传递给execute(例如c.execute(player, ("Bob O'Niel",))

【讨论】:

  • 所以函数是这样的:registerPlayer("Bob O'Niel"),但它仍然没有注册。
猜你喜欢
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 2013-01-27
  • 1970-01-01
  • 2012-05-21
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多