Python 引用在PostgreSQL查询中不起作用
我有下表Python 引用在PostgreSQL查询中不起作用,python,sql,database,postgresql,Python,Sql,Database,Postgresql,我有下表 create table players (name varchar(30), playerid serial primary key); 创建表播放器(名称varchar(30),playerid序列主键) 我正在使用脚本: def registerPlayer(name): """Registers new player.""" db = psycopg2.connect("dbname=tournament") c = db.cursor() pl
create table players (name varchar(30), playerid serial primary key); 创建表播放器(名称varchar(30),playerid序列主键)
我正在使用脚本:
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() def注册层(名称): “”“注册新玩家。”“” db=psycopg2.connect(“dbname=tournament”) c=db.cursor() player=“插入到players值(%s);” scores=“插入分数(赢、比赛)值(0、0) c、 执行(玩家,(姓名) c、 执行(分数) 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查询都大写,所有内容都停止工作。我回到了工作正常的代码,现在什么都不工作了 SQL中的双引号不是字符串-它们转义表、索引和其他对象名称(例如,
“John Smith”
指名为John Smith
的表)。实际上,只有单引号字符串才是字符串
在任何情况下,如果您正确地使用了查询参数(在示例代码中,您似乎是这样),就不必担心转义数据。只需将原始值传递给
execute
(例如c.execute(player,(“Bob O'Niel”)
)插入players值(““任意名称”)代码>此外,您必须遵循列顺序或显式设置列名。-所以函数是这样的:registerPlayer(“Bob O'Niel”),但它仍然没有注册。