Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.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
Python 脚本don';t执行cur.execute()中的命令_Python_Sql_Postgresql_Psycopg2 - Fatal编程技术网

Python 脚本don';t执行cur.execute()中的命令

Python 脚本don';t执行cur.execute()中的命令,python,sql,postgresql,psycopg2,Python,Sql,Postgresql,Psycopg2,我是postgresql和psycopg2的新手,我面临一个问题 import psycopg2 def create_tables(whichone): in_str_station = "CREATE TABLE station (id SMALLINT NOT NULL PRIMARY KEY, name VARCHAR(40) NOT NULL," \ " country VARCHAR(3) NOT NU

我是postgresql和psycopg2的新手,我面临一个问题

import psycopg2


def create_tables(whichone):

     in_str_station = "CREATE TABLE station (id SMALLINT NOT NULL PRIMARY KEY,  name VARCHAR(40) NOT NULL," \
                 " country VARCHAR(3) NOT NULL, latitude VARCHAR(10),  " \
                 "longitude VARCHAR(10),height SMALLINT);"

     in_str_dailyData = "CREATE TABLE daily_data (id BIGSERIAL NOT NULL PRIMARY KEY," \
                   "s_id SMALLINT NOT NULL REFERENCES station(id)," \
                   "d_date DATE NOT NULL, d_mean NUMERIC(6, 1), quality SMALLINT);"

     int_str_monthlyMean = "CREATE TABLE monthly_mean (id BIGSERIAL NOT NULL PRIMARY KEY,"\
                      "s_id SMALLINT NOT NULL REFERENCES station(id),"\
                      "m_date DATE NOT NULL, m_mean NUMERIC(9, 3),"\
                      "var NUMERIC(9, 3), std NUMERIC(9, 3));"

     in_str_yearlymean = "CREATE TABLE yearly_mean (id BIGSERIAL NOT NULL PRIMARY KEY, " \
                    "s_id SMALLINT NOT NULL REFERENCES station(id)," \
                    "y_date DATE NOT NULL, y_mean NUMERIC(9, 3),var NUMERIC(9, 3)," \
                    "std NUMERIC(9, 3), var_m NUMERIC(9, 3), std_m NUMERIC(9, 3));"

     database_list = {'station': in_str_station, 'monthly_mean': int_str_monthlyMean,
                 'daily_data': in_str_dailyData, 'yearly_mean': in_str_yearlymean}

     try:
        conn = psycopg2.connect(
          host="localhost",
          database="climate",
          user="postgres",
          password="1")

       cur = conn.cursor()
       in_str = database_list.get(whichone)
       cur.execute(in_str)
       output_ = cur.fetchall()
       print(output_)
       cur.close()
    except (Exception, psycopg2.DatabaseError) as error:
       print(error)
    finally:
       if conn is not None:
          conn.close()
在我运行脚本no meter之后,没有创建哪个in_str_uichoose表。我已经检查过了,当我复制我在cur.execute中执行的in_str的内容并在postgre shell中使用它时,一切正常。 你能告诉我哪里出错了吗?
提前谢谢

我不知道你刚才是否这么做了,但缩进错误了。您需要在函数后缩进代码

def foo(a):
    pass
调用
conn.commit()
cur.execute()
之后,但在
conn.close()之前。与psycopg2的事务:

如果在事务进行过程中连接被关闭(使用close()方法)或破坏(使用del或使其脱离范围),服务器将丢弃该事务


哦,很抱歉,我在粘贴代码时出错了。代码定义了create_tables()函数,但没有调用它。如果您有其他实际调用它的代码,请显示该代码。好的,谢谢,在我在cur.execute()之后添加此代码后,它可以工作