Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL python连接错误_Python_Sql - Fatal编程技术网

SQL python连接错误

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'

为了在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'
              ',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,))