psycopg creata 数据库失败,语法错误
psycopg creata database failed,syntax error
我用psycopg2创建数据库失败,语法错误,但在前几行使用相同的语法是行得通的,为什么要问?两行代码,为什么是第二行语法错误?
[代码]
db_name = 'series_id'
self._cur_root.execute("CREATE DATABASE '%s' owner %s ;" % (db_name, self.username))
[错误]
syntax error at or near "'series_id'"
LINE 1: CREATE DATABASE 'series_id' owner postgres ;
更正代码,从 %s 中删除 cotes:
self._cur_root.execute("CREATE DATABASE %s owner %s ;" % (db_name, self.username))
PostgreSQL 对字符串使用单引号,对可能被错误解析或包含大写字母的文字和名称使用双引号。如果您需要引用一个名字,请尝试:
' CREATE DATABASE "%s" OWNER "%s"; ' % ....
在这里您手动呈现您的请求。通常最好使用 DB 驱动程序的函数来替换值 - 它们会正确引用并防止 SQL 注入。
我用psycopg2创建数据库失败,语法错误,但在前几行使用相同的语法是行得通的,为什么要问?两行代码,为什么是第二行语法错误?
[代码]
db_name = 'series_id'
self._cur_root.execute("CREATE DATABASE '%s' owner %s ;" % (db_name, self.username))
[错误]
syntax error at or near "'series_id'"
LINE 1: CREATE DATABASE 'series_id' owner postgres ;
更正代码,从 %s 中删除 cotes:
self._cur_root.execute("CREATE DATABASE %s owner %s ;" % (db_name, self.username))
PostgreSQL 对字符串使用单引号,对可能被错误解析或包含大写字母的文字和名称使用双引号。如果您需要引用一个名字,请尝试:
' CREATE DATABASE "%s" OWNER "%s"; ' % ....
在这里您手动呈现您的请求。通常最好使用 DB 驱动程序的函数来替换值 - 它们会正确引用并防止 SQL 注入。