动态查询psycopg2 - 表未创建,但没有引发错误

时间:2018-02-06 16:21:44

标签: python postgresql psycopg2

我试图通过psycopg2在postgresql 10中创建分区表。表的名称是我作为参数得到的变量。我没有得到任何错误,但表没有创建:

     def create_partition(day,month,year):
        cursor=connect_db()
        relname='log_full_'+year+'_'+month+'_'+day
        range_day=year+'-'+month+'-'+day + ' 00:00:00'
        partition_range_day=datetime.strptime(range_day,"%Y-%m-%d %H:%M:%S")    partition_range_next_day=datetime.strftime(partition_range_day+timedelta(days=1),"%Y-%m-%d %H:%M:%S")
        partition_range_day=str(partition_range_day)
        partition_range_next_day=str(partition_range_next_day)
        cursor.execute("SELECT count(*) from pg_class where relname like %s",(relname,))
        rows=cursor.fetchall()
        if int(rows[0][0])==0:
                 cursor.execute(sql.SQL("create table {} partition of log_full(end_date) for VALUES from (%s) TO (%s) partition by list (start_stop)").format(sql.Identifier(relname)),(str(partition_range_day),str(partition_range_next_day),))

我也尝试过更改execute命令的语法,但结果是一样的:

cursor.execute("create table %s partition of radius_log_full(end_date) for VALUES from (%%s) TO (%%s) partition by list (start_stop);" % relname,[str(partition_range_day),str(partition_range_next_day)])

我没有得到任何错误,表格没有创建.. 在我的postgresql数据库的serverlog中,我看到了下一个输出:

[2018-02-07 13:12:47 IST] LOG:  duration: 10.618 ms  statement: create table "log_full_2018_02_01" partition of log_full(end_date) for VALUES from ('2018-02-01 00:00:00') TO ('2018-02-02 00:00:00') partition by list (start_stop);

当我在psql客户端界面上运行此命令时,会创建表。而且,它没有在不同的模式上创建表,因为我查询了pg_class而我没有找到关系。

我的问题是我的代码有什么问题,动态查询的最佳解决方案是什么?为什么?我的psycopg2版本是2.7.1

0 个答案:

没有答案