如何避免 read_sql_query 返回集的数据截断

我正在执行一个 sql 命令,该命令返回我的数据库 PostgreSQL 提供的创建表语句。为了执行 sql 命令,我使用:


import io  

import json  

import pandas as pd

import pandas.io.sql as psql

import psycopg2 as pg

import boto3

from 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) 

我的范围创建一个表。通过 Pandas / Python 执行“pd.read_sql_query”命令后,PostgreSql 返回表创建脚本。


如果我在 pgsql 解释器(例如 pgadmin 等)中执行“createTable_sql”,它工作正常,结果我只有一列具有预期的创建表语句,或者只是一个长度为 512 个字符的纯字符串。


“createTable_sql”变量的内容是:


    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;"

执行这个sql命令的结果应该是:


 CREATE TABLE dbo.table1 (col1 datatype, col2, datatype, ....etc) -total number of charters from script is 512.

我的问题是 Pandas read_sql_query 或 read_sql 对于返回的数据集有限制(或者至少是我认为的)。

我期望返回或读取的数据集有 512 个字符,但 read_sql 方法正在截断它。


当我尝试访问 Postgresql (数据库引擎)返回的结果时,我得到的结果是:


' CREATE TABLE dbo.tabl1 (col1...'

 

因此,我只拥有在前几个字符后被截断的内容,而不是全文(代表表创建脚本)。


最初我认为它只是在使用 print() 函数获取返回结果时被截断,但值本身也被截断了。

但 table_script 内容仍然被截断,如下所示:


' 创建表 dbo.tabl1 (col1...'


有什么方法可以检索响应集,即可以具有数据类型定义(例如 Varchar(1000) 或 STR)的单个列(例如 Col1)?


慕尼黑的夜晚无繁华
浏览 107回答 1
1回答

慕后森

如果使用 using 运行相同的查询工作正常,也许可以尝试直接从?pgadmin运行查询 psycopg2尝试使用以下代码块代替pandas:cur = conn.cursor()cur.execute(createTable_sql)result = cur.fetchall()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python