我正在执行一个 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)?
慕后森
相关分类