使用定义变量创建表

时间:2018-10-07 08:16:42

标签: python postgresql psycopg2

我正在尝试使用python psycopg2在PostgreSQL中创建一个表。 因此,当我执行:create_table(location)时,它将生成位置表。 我看了网上的各种教程。但我只是无法使它起作用,有任何想法吗?

import psycopg2

def create_table(table_name):
    try:
        conn = psycopg2.connect("dbname=db host=localhost user=user password=pw")
    except:
        print("I am unable to connect to the database") 

    cur = conn.cursor()
    try:
        cur.execute('''
        CREATE TABLE public.s% (
                id serial NOT NULL,
                x double precision,
                y double precision,
                z double precision,
                geom geometry, 
                dist double precision,
                CONSTRAINT test21_pkey PRIMARY KEY (id))
                ''')
    except:
        print("Error!")

    conn.commit()
    conn.close()
    cur.close()

2 个答案:

答案 0 :(得分:1)

您的原始代码中的s%看起来像是对%-formatting的尝试,尽管转换说明符应为%s并且您实际上并未设置字符串格式。由于您使用的是psycopg2,因此应该使用它提供的SQL string composition工具:

from psycopg2 import sql

stmt = sql.SQL('''CREATE TABLE public.{} (
    id serial NOT NULL,
    x double precision,
    y double precision,
    z double precision,
    geom geometry, 
    dist double precision,
    CONSTRAINT test21_pkey PRIMARY KEY (id))
    ''')

cur.execute(stmt.format(sql.Identifier(table_name)))

请注意,stmt.format()不是str.format(),而是SQL.format()。如有必要,这可以正确引用标识符。

答案 1 :(得分:0)

尝试以下

try:
        cur.execute('
        CREATE TABLE public.{} (
                id serial NOT NULL,
                x double precision,
                y double precision,
                z double precision,
                geom geometry, 
                dist double precision,
                CONSTRAINT test21_pkey PRIMARY KEY (id))
                '.format(table_name))