Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.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和snowflake cursor正在添加额外的文本来更改表外键查询,从而导致无法找到表本身_Python_Foreign Keys_Snowflake Cloud Data Platform - Fatal编程技术网

Python和snowflake cursor正在添加额外的文本来更改表外键查询,从而导致无法找到表本身

Python和snowflake cursor正在添加额外的文本来更改表外键查询,从而导致无法找到表本身,python,foreign-keys,snowflake-cloud-data-platform,Python,Foreign Keys,Snowflake Cloud Data Platform,我正在构建一个管道,将本地文件夹中的数据上传到雪花云 上传每个表后的最后一步是更改以CSV文件名命名的表本身,向主表添加外键。我正在做以下工作: query = """ALTER TABLE """+filename+""" ADD FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS(SURVEY_ID)""" if(cursor.execut

我正在构建一个管道,将本地文件夹中的数据上传到雪花云

上传每个表后的最后一步是更改以CSV文件名命名的表本身,向主表添加外键。我正在做以下工作:

query = """ALTER TABLE """+filename+""" ADD FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS(SURVEY_ID)"""
if(cursor.execute(query)):
    print(filename+ " FOREIGN KEY added successfully")
else:
    print(filename+" FOREIGN KEY was not added")
我有以下错误:

表“MY_DB.PUBLIC.SURVEY_AST”不存在或不存在 授权的

我知道表名应该与上面的一样,以便找到并执行查询:

“我的数据库”“公共”“调查”

如果我打印
文件名
,我将得到:

调查

我尝试使用
%s
,但无法使用雪花光标绑定表名本身:

query = """ALTER TABLE %s ADD FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS(SURVEY_ID)"""
if(cursor.execute(query, (filename)):
    print(filename+ " FOREIGN KEY added successfully")
else:
    print(filename+" FOREIGN KEY was not added")
如何使引擎停止将额外文本绑定到表本身,以便找到它并执行查询

请注意,前面的查询工作正常(插入、选择…)

编辑

conn = snowCtx.connect(
    user=user,
    password=password,
    account=account,
    database='MY_DB',
    schema='PUBLIC',
    warehouse='COMPUTE_WH',
    role='SYSADMIN'
)
if(success):
    print(filename+' columns uploaded')
    # UPDATE now variable
    now = date.today().strftime("%Y-%m-%d")
    # To insert the data files into the new table
    data = data.applymap(str)
    data['_xform_id'] = data['_xform_id'].apply(lambda x: int(float(x)))
    data['SURVEY_ID'] = data['SURVEY_ID'].apply(lambda x: int(str(x)))
    try:
        data.to_sql(name=filename, 
              con=engine.connect(), 
              if_exists="replace", 
              index=False)
        print(filename+' to_sql() done.')
        print("--- %s seconds ---" % (time.time() - start_time))
        log_frame.append({'Survey Name': filename, 'Survey ID': nextval}, ignore_index=True)
    except sqlalchemy.exc.Error as e:
        print("Error adding the table: "+ e)
    # Add a foreign key
    finally:
        # query = "select count (*) from information_schema.tables WHERE table_type = 'BASE TABLE' AND table_name="+filename

        print(filename)
        query = """ALTER TABLE {0}  ADD FOREIGN KEY (SURVEY_ID) REFERENCES SURVEYS(SURVEY_ID)""".format(filename.replace('\'', '\'\''))
        print(query)
        if(cursor.execute(query)):
            print(filename+ " FOREIGN KEY added successfully")
        else:
            print(filename+" FOREIGN KEY was not added")

我不认为它添加了任何额外的文本。如我所见,错误消息包括数据库和模式名称(这是预期的)。例如:

create table DENEME ( i integer );

alter table DENEME2 add column z varchar;

SQL compilation error: Table 'GOKHAN_DB.PUBLIC.DENEME2' does not exist or not authorized.
请检查查询历史记录以查看SQL文本:

您认为表名应该如下所示吗

“我的数据库”“公共”“调查”


它与MY_DB.PUBLIC.SURVEY_AST没有什么不同(因为所有字符都是大写的)。所以它应该会起作用。请检查前面的命令以了解如何创建表(可能是在不同的架构中创建的)。

解决方案是对
文件名本身执行以下操作:

filename = "\""+database+"\".\""+schema+"\".\""+filename+"\""
结果恰恰是:

"MY_DB"."SCHEMA"."TABLENAME"

我不这么认为,因为我在snowflake上尝试了完全相同的查询:
'MY\u DB.PUBLIC.SURVEY\u AST'
,收到了相同的错误我认为表正在添加,但没有完全设置,所以在执行脚本之前等待几秒钟应该可以让它工作吗?您可以共享整个脚本吗?您是否异步运行这些命令?您说过INSERT在您的表上工作,所以它不应该与未完全设置有关。当然,我将与您共享脚本。给我10分钟。脚本补充说,先生。希望你能帮我。