我有下表
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
答案 0 :(得分:2)
SQL中的双引号不是字符串 - 它们转义表,索引和其他对象名称(例如"John Smith"
引用名为John Smith
的表)。只有单引号字符串实际上是字符串。
在任何情况下,如果您正确使用查询参数(在您的示例代码中,您似乎是这样),您不必担心转义数据。只需将原始值传递给execute
(例如c.execute(player, ("Bob O'Niel",))
)