SQL python连接错误
为了在PostGIS中创建一个表,我尝试使用字符串链和变量运行python脚本,我遇到问题的SQL代码语法是:SQL python连接错误,python,sql,Python,Sql,为了在PostGIS中创建一个表,我尝试使用字符串链和变量运行python脚本,我遇到问题的SQL代码语法是: table_sql = ('CREATE TABLE %s (' % name_table 'gid integer NOT NULL DEFAULT nextval(%s)' % name_seq ',point_x numeric' ',point_y numeric'
table_sql = ('CREATE TABLE %s (' % name_table
'gid integer NOT NULL DEFAULT nextval(%s)' % name_seq
',point_x numeric'
',point_y numeric'
',grid_code double precision'
',geom geometry(Point, %d)' % srd_id
',CONSTRAINT %s PRIMARY KEY(gid))' % name_pkey)
print table_sql
当我执行该代码时(我使用MS-DOS控制台),它会说:
File "csv2postgis.py", line 63
'gid integer NOT NULL DEFAULT nextval(%s)' % name_seq
^
SyntaxError: invalid syntax
我正在使用psycopg2模块。以前,我在谈论DB-API 2.0时尝试使用三重引号(“”),但我无法将这些变量附加到主字符串链,这就是为什么现在我尝试使用简单引号使其工作的原因。自动字符串连接(
'foo''bar'
)仅当字符串之间只有空格时才有效
在您的情况下,在中间有几个字符串插值。将所有这些都移到结尾,在元组
中。table_sql = ('CREATE TABLE %s ('
'gid integer NOT NULL DEFAULT nextval(%s)'
',point_x numeric'
',point_y numeric'
',grid_code double precision'
',geom geometry(Point, %d)'
',CONSTRAINT %s PRIMARY KEY(gid))' % (
name_table, name_seq, srd_id, name_pkey)
)
对于值,最好使用。对于名称(name\u table
、name\u seq
、和name\u pkey
),如果从用户输入中接受,则根据已知对象名称验证这些名称
srd\u id
应作为SQL参数提供;将%d
替换为%s
(以转义占位符),然后将值传递到cur.execute()
:
现在,数据库适配器将负责值的正确转义。这就是我成功地将SQL字符串创建为python变量的原因:
table_sql=“”创建表%s(gid integer NOTNULL默认下一步(“%s”)、点x数字、点y数字、值双精度、名称varchar(50)、几何图形(点、%%s)、约束%s主键(gid))”“”%(名称表、名称seq、名称pkey)
您在这里根本没有使用参数。请阅读。@BurhanKhalid:只有srd\u id
可以用作参数。对,所以我的第二个示例缺少开头(
在表名之后;这是我的一个输入错误;现在更正了。
table_sql = '''\
CREATE TABLE %s (
gid integer NOT NULL DEFAULT nextval(%s)
,point_x numeric
,point_y numeric
,grid_code double precision
,geom geometry(Point, %%s)
,CONSTRAINT %s PRIMARY KEY(gid))
''' % (name_table, name_seq, name_pkey)
cur.execute(table_sql, (srd_id,))