Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

\d schema.table crashes #87

Open
dpriedel opened this issue Sep 11, 2019 · 1 comment
Open

\d schema.table crashes #87

dpriedel opened this issue Sep 11, 2019 · 1 comment

Comments

@dpriedel
Copy link

I am using the latest version of pgspecial with postgresql 11.5 on Manjaro Linux.

I am using pgspecial from ipython-sql

Once I connect to my DB, I can run commands such as:

%sql \dn pg_catalog

and get proper output

But, if I try to run a command such as:

%sql \d pg_catalog.pg_class

it crashes with the following stack trace

`

AttributeError Traceback (most recent call last)
in
----> 1 get_ipython().run_line_magic('sql', '\d pg_catalog.pg_class')

/usr/lib/python3.7/site-packages/IPython/core/interactiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
2312 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2313 with self.builtin_trap:
-> 2314 result = fn(*args, **kwargs)
2315 return result
2316

</usr/lib/python3.7/site-packages/decorator.py:decorator-gen-127> in execute(self, line, cell, local_ns)

/usr/lib/python3.7/site-packages/IPython/core/magic.py in (f, *a, **k)
185 # but it's overkill for just that one bit of state.
186 def magic_deco(arg):
--> 187 call = lambda f, *a, **k: f(*a, **k)
188
189 if callable(arg):

</usr/lib/python3.7/site-packages/decorator.py:decorator-gen-126> in execute(self, line, cell, local_ns)

/usr/lib/python3.7/site-packages/IPython/core/magic.py in (f, *a, **k)
185 # but it's overkill for just that one bit of state.
186 def magic_deco(arg):
--> 187 call = lambda f, *a, **k: f(*a, **k)
188
189 if callable(arg):

/usr/lib/python3.7/site-packages/sql/magic.py in execute(self, line, cell, local_ns)
93
94 try:
---> 95 result = sql.run.run(conn, parsed['sql'], self, user_ns)
96
97 if result is not None and not isinstance(result, str) and self.column_local_vars:

/usr/lib/python3.7/site-packages/sql/run.py in run(conn, sql, config, user_namespace)
335 _, cur, headers, _ = pgspecial.execute(
336 conn.session.connection.cursor(), statement)[0]
--> 337 result = FakeResultProxy(cur, headers)
338 else:
339 txt = sqlalchemy.sql.text(statement)

/usr/lib/python3.7/site-packages/sql/run.py in init(self, cursor, headers)
298
299 def init(self, cursor, headers):
--> 300 self.fetchall = cursor.fetchall
301 self.fetchmany = cursor.fetchmany
302 self.rowcount = cursor.rowcount

AttributeError: 'list' object has no attribute 'fetchall'
`

It doesn't matter what table I use.

@dpriedel
Copy link
Author

Comming back to this and spending some time debugging, what I found is that the outputs from this call: _, cur, headers, _ = pgspecial.execute(conn.session.connection.cursor(), statement)[0]
are not compatible with the inputs to this call: result = FakeResultProxy(cur, headers)

Specifically, the variable 'cur' contains a list of the rows returned from running the command NOT a cursor. The FakeResultProxy class expects a cursor in the 'cur' variable.

I hacked a work-around so I can use this but I doubt it's a real fix.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant