为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕尼黑的夜晚无繁华 2023-07-27 09:54:58
我正在执行一个 sql 命令,该命令返回我的数据库 PostgreSQL 提供的创建表语句。为了执行 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) 我的范围创建一个表。通过 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)?
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

如果使用 using 运行相同的查询工作正常,也许可以尝试直接从?pgadmin运行查询 psycopg2尝试使用以下代码块代替pandas:


cur = conn.cursor()

cur.execute(createTable_sql)

result = cur.fetchall()


查看完整回答
反对 回复 2023-07-27
  • 1 回答
  • 0 关注
  • 106 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信