我正在尝试使用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()
答案 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))