我正在執(zhí)行一個 sql 命令,該命令返回我的數(shù)據(jù)庫 PostgreSQL 提供的創(chuàng)建表語句。為了執(zhí)行 sql 命令,我使用:import io import json import pandas as pdimport pandas.io.sql as psqlimport psycopg2 as pgimport boto3from datetime import datetime conn = pg.connect( host=pgparams['url'], dbname=pgparams['db'], user=pgparams['usr'], password=pgparams['pwd']) createTable_sql = "postgresql select which returns the create table statement" df_create_table_script = pd.read_sql_query(createTable_sql ,con=connection) 我的范圍創(chuàng)建一個表。通過 Pandas / Python 執(zhí)行“pd.read_sql_query”命令后,PostgreSql 返回表創(chuàng)建腳本。如果我在 pgsql 解釋器(例如 pgadmin 等)中執(zhí)行“createTable_sql”,它工作正常,結(jié)果我只有一列具有預(yù)期的創(chuàng)建表語句,或者只是一個長度為 512 個字符的純字符串?!癱reateTable_sql”變量的內(nèi)容是: createTable_sql= "SELECT cast ('CREATE TABLE dbo.table1 (" ... createTable_sql= createTable_sql + "|| string_agg(pa.attname || ' ' || pg_catalog.format_type(pa.atttypid, pa.atttypmod)|| coalesce(' DEFAULT ' || (select pg_catalog.pg_get_expr(d.adbin, d.adrelid) from pg_catalog.pg_attrdef d where d.adrelid = pa.attrelid and d.adnum = pa.attnum and pa.atthasdef), '') || ' ' || case pa.attnotnull when true then 'NOT NULL' else 'NULL' end, ',')" createTable_sql= createTable_sql + " as column_from_script from pg_catalog.pg_attribute pa join pg_catalog.pg_class pc on pc.oid = pa.attrelid and pc.relname = 'tabl1_source' join pg_catalog.pg_namespace pn on pn.oid = pc.relnamespaceand pn.nspname = 'dbo' where pa.attnum > 0 and not pa.attisdropped group by pn.nspname, pc.relname, pa.attrelid;"執(zhí)行這個sql命令的結(jié)果應(yīng)該是: CREATE TABLE dbo.table1 (col1 datatype, col2, datatype, ....etc) -total number of charters from script is 512.我的問題是 Pandas read_sql_query 或 read_sql 對于返回的數(shù)據(jù)集有限制(或者至少是我認為的)。我期望返回或讀取的數(shù)據(jù)集有 512 個字符,但 read_sql 方法正在截斷它。當(dāng)我嘗試訪問 Postgresql (數(shù)據(jù)庫引擎)返回的結(jié)果時,我得到的結(jié)果是:' CREATE TABLE dbo.tabl1 (col1...' 因此,我只擁有在前幾個字符后被截斷的內(nèi)容,而不是全文(代表表創(chuàng)建腳本)。最初我認為它只是在使用 print() 函數(shù)獲取返回結(jié)果時被截斷,但值本身也被截斷了。但 table_script 內(nèi)容仍然被截斷,如下所示:' 創(chuàng)建表 dbo.tabl1 (col1...'有什么方法可以檢索響應(yīng)集,即可以具有數(shù)據(jù)類型定義(例如 Varchar(1000) 或 STR)的單個列(例如 Col1)?
1 回答

慕后森
TA貢獻1802條經(jīng)驗 獲得超5個贊
如果使用 using 運行相同的查詢工作正常,也許可以嘗試直接從?pgadmin運行查詢 psycopg2嘗試使用以下代碼塊代替pandas:
cur = conn.cursor()
cur.execute(createTable_sql)
result = cur.fetchall()
添加回答
舉報
0/150
提交
取消