报价在PostgreSQL查询中不起作用

时间:2015-10-20 23:24:15

标签: python sql database postgresql

我有下表

create table players (name varchar(30), playerid serial primary key);

我正在使用脚本:
def registerPlayer(name):
    """Registers new player."""
    db = psycopg2.connect("dbname=tournament")
    c = db.cursor()
    player = "insert into players values (%s);"
    scores = "insert into scores (wins, matches) values (0, 0);"
    c.execute(player, (name,))
    c.execute(scores)
    db.commit()
    db.close()

但是当我尝试用引号中的参数注册一个播放器时如下:

registerPlayer("Any Name")

它不起作用......现在,如果我直接在psql中输入查询,如果我只使用单引号就行了

INSERT INTO players VALUES ('Any Name');

但如果我使用"任何名字"。如果我使用"",它会告诉我:

ERROR:  column "Any Name" does not exist

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

前几天报价工作正常,我去格式化所有SQL查询都是大写的,一切都停止了。我回到了工作正常的代码,现在没有任何工作!

1 个答案:

答案 0 :(得分:2)

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

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