第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Python 中執(zhí)行原始 SQL 查詢時出現(xiàn)問題:sqlalchemy.exc

在 Python 中執(zhí)行原始 SQL 查詢時出現(xiàn)問題:sqlalchemy.exc

躍然一笑 2022-06-22 15:32:17
我在 python 腳本中有一個查詢,它在創(chuàng)建一些表后創(chuàng)建一個物化視圖。腳本是這樣的:    from sqlalchemy import create_engine, text    sql = '''CREATE MATERIALIZED VIEW schema1.view1 AS             SELECT t1.a,              t1.b,              t1.c,              t2.x AS d            FROM schema1.t1 t1            LEFT JOIN schema1.t2 t2 ON t1.f = t2.f            UNION ALL            SELECT t3.a,               t3.b,               t3.c,               t3.d            FROM schema1.t3 t3;'''    con=create_engine(db_conn)    con.execute(sql)當我直接在數(shù)據(jù)庫上運行時,查詢成功執(zhí)行。但是在python中運行腳本時,出現(xiàn)錯誤:sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "CREATE MATERIALIZED VIEW schema"我一生都無法弄清楚它有什么問題-有什么想法嗎?
查看完整描述

2 回答

?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

這是最奇怪的事情。我已經(jīng)從另一個工具中復(fù)制了我的查詢文本,該工具用于在我的 pg DB 中導航到 VS Code 中。@EOhm 回答的最后一部分讓我想到了在 VS Code 中輸入整個內(nèi)容而不是復(fù)制/粘貼。

一切正常。

即使粘貼的文本和我輸入的內(nèi)容在各個方面看起來都相同。所以顯然有一些不可見的格式導致了這個問題。


查看完整回答
反對 回復(fù) 2022-06-22
?
三國紛爭

TA貢獻1804條經(jīng)驗 獲得超7個贊

我不知道 SQLAlchemy 是否支持 MView-Creation,但它是否應(yīng)該與特定的元數(shù)據(jù)函數(shù)(https://docs.sqlalchemy.org/en/13/core/schema.html)相似或完成。


text 函數(shù)是為數(shù)據(jù)庫獨立的 DML 而設(shè)計的,而不是 DDL。也許它適用于 DDL(我不了解 SQLAlchemy),但根據(jù)設(shè)計,語法與您直接在數(shù)據(jù)庫上執(zhí)行時的語法不同,因為 SQLAlchemy 將從用戶那里抽象出數(shù)據(jù)庫的詳細信息。


如果 SQLAlchemy 沒有為此提供一些方便的方法,并且您仍然有充分的理由使用 SQLAlchemy,您可以在數(shù)據(jù)庫后端理解的方言中執(zhí)行普通 SQL Statememt,因此只需省略textSQL 語句的 sqlalchemies 函數(shù),例如:


   from sqlalchemy import create_engine, text


    sql = '''CREATE MATERIALIZED VIEW schema.view1 AS 

            SELECT t1.a,

              t1.b,

              t1.c

              t2.x AS d

            FROM schema.t1 t1

            LEFT JOIN schema.t2 t2 ON t1.f = t2.f

            UNION ALL

            SELECT t3.a, 

              t3.b, 

              t3.c, 

              t3.d

            FROM schema.t3 t3;'''


    con=create_engine(db_conn)

    con.raw_connection().cursor().execute(sql)

(但當然,您必須注意后端類型,然后反對 SQLAlchemy 包裝語句。)


我直接使用 psycopg2 在我的 pg 服務(wù)器上進行了測試,沒有任何問題。


postgres=# create schema schema;

CREATE TABLE

postgres=# create table schema.t1 (a varchar, b varchar, c varchar, f integer);

CREATE TABLE

postgres=# create table schema.t2 (x varchar, f integer);

CREATE TABLE

postgres=# create table schema.t3 (a varchar, b varchar, c varchar, d varchar);

CREATE TABLE

postgres=# commit;

使用以下腳本:


#!/usr/bin/python3

import psycopg2;


conn = psycopg2.connect("dbname=postgres")

cur = conn.cursor()

cur.execute("""

            CREATE MATERIALIZED VIEW schema.view1 AS

            SELECT t1.a,

              t1.b,

              t1.c,

              t2.x AS d

            FROM schema.t1 t1

            LEFT JOIN schema.t2 t2 ON t1.f = t2.f

            UNION ALL

            SELECT t3.a,

              t3.b,

              t3.c,

              t3.d

            FROM schema.t3 t3;

""")

conn.commit()

cur.close()

conn.close()

我用最新版本的 python3.7/2.7 和當前版本的 psycopg2 模塊和當前庫(我有 11.5 pg 客戶端和 2.8.3 psycopg2)從安裝在最近的 linux 上的 pgdg 進行測試?你能像我一樣嘗試直接在 psycopg2 上執(zhí)行嗎?


您是否還確保您的點是普通的 ascii 點,因為聲明中的所有其他字符都在這種情況下?(還請記住,unicode 中可能存在不可見的代碼點,這可能會導致此類問題。)如果您使用的是 Python,也許您可以將您的字符串轉(zhuǎn)換為 ASCII 二進制文件,然后再轉(zhuǎn)換回 Unicode-String。如果它沒有引發(fā)錯誤,.encode('ASCII')它應(yīng)該是干凈的。


查看完整回答
反對 回復(fù) 2022-06-22
  • 2 回答
  • 0 關(guān)注
  • 303 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號