kx.q.sql('select * from trades') command error

https://learninghub.kx.com/forums/topic/kx-q-sqlselect-from-trades-command-error

kx.q.sql('select * from trades') 

QError Traceback (most recent call last) Cell File /opt/anaconda3/envs/kx/lib/python3.10/site-packages/pykx/_wrappers.pyx:499, in pykx._wrappers._factory() File /opt/anaconda3/envs/kx/lib/python3.10/site-packages/pykx/_wrappers.pyx:492, in pykx._wrappers.factory()

QError: .s.sp

>>> import pykx
>>> pykx.q('l s.k_')
pykx.Identity(pykx.q('::'))
>>> import os
>>> os.environ["QHOME"]
'/opt/anaconda3/envs/shift/lib/python3.11/site-packages/pykx/lib'
>>> os.listdir(os.environ["QHOME"])
['objstor.q_', 'q.k', 'rest.q_', 'kurl.sidecar.q_', 'bq.q_', 'm64', 'm64arm', 'kxic.k', 'read.q', 'csvutil.q', 'qlog.q_', 'l64arm', 'kurl.q_', 'w64', 's.k_', 'write.q', 'p.q', 'l64']
  1. What version of PyKX as you using?
  2. Can you run this example?
>>> import pykx as kx 
>>> kx.__version__ '1.6.0' 
>>> kx.q('trades: ([]sym:`ibm`msft`apple`samsung;mcap:2000 4000 9000 6000;ex:`nasdaq`nasdaq`DAX`Dow)') 
pykx.Identity(pykx.q('::')) 
>>> kx.q.sql('select * from trades') 
pykx.Table(pykx.q(' 
sym mcap ex 
------------------- 
ibm 2000 nasdaq 
msft 4000 nasdaq 
apple 9000 DAX 
samsung 6000 Dow 
'))
   
>>> import pykx as kx
>>> kx.__version__
'1.6.0'
>>> kx.q('trades: ([]sym:`ibm`msft`apple`samsung;mcap:2000 4000 9000 6000;ex:`nasdaq`nasdaq`DAX`Dow)')
pykx.Identity(pykx.q('::'))
>>> kx.q.sql('select * from trades')
Traceback (most recent call last):
File "", line 1, in 
File "/opt/anaconda3/envs/shift/lib/python3.11/site-packages/pykx/query.py", line 528, in __call__
return self._q('.s.sp', k.CharVector(query), args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/shift/lib/python3.11/site-packages/pykx/embedded_q.py", line 142, in __call__
return factory(result, False)
^^^^^^^^^^^^^^^^^^^^^^
File "pykx/_wrappers.pyx", line 499, in pykx._wrappers._factory
File "pykx/_wrappers.pyx", line 492, in pykx._wrappers.factory
pykx.exceptions.QError: .s.sp

To use sql library you will need the correct flag in your license:

>>> print('n'.join(pykx.q('.z.l 4').py().decode().split())) 
insights.lib.embedq 
insights.lib.pykx 
insights.lib.sql ##<<------ Do you see this? 
insights.lib.qlog 
insights.lib.kurl 
insights.lib.objstore 
insights.lib.bigquery 
insights.lib.restserver

 

Python 3.10.10 | packaged by conda-forge | (main, Mar 24 2023, 20:12:31) [Clang 14.0.6 ] on darwin
Type “help”, “copyright”, “credits” or “license” for more information.

import pykx
print(‘n’.join(pykx.q(‘.z.l 4’).py().decode().split()))
insights.lib.embedq
insights.lib.pykx
insights.lib.sql
insights.app.rt
insights.lib.qlog
insights.lib.kurl
insights.lib.objstore
insights.lib.bigquery
insights.lib.restserver

As this ran without error you should now be able to use your query:

>>> pykx.q('l s.k_') 
pykx.Identity(pykx.q('::'))

Should now run:

kx.q.sql('select * from trades')
>>> kx.q('trades: ([]sym:`ibm`msft`apple`samsung;mcap:2000 4000 9000 6000;ex:`nasdaq`nasdaq`DAX`Dow)')
pykx.Identity(pykx.q('::'))

>>> kx.q.sql('select * from trades')
Traceback (most recent call last):
File "", line 1, in 
File "/opt/anaconda3/envs/shift/lib/python3.11/site-packages/pykx/query.py", line 528, in __call__
return self._q('.s.sp', k.CharVector(query), args)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/opt/anaconda3/envs/shift/lib/python3.11/site-packages/pykx/embedded_q.py", line 142, in __call__
return factory(result, False)
^^^^^^^^^^^^^^^^^^^^^^
File "pykx/_wrappers.pyx", line 499, in pykx._wrappers._factory
File "pykx/_wrappers.pyx", line 492, in pykx._wrappers.factory
pykx.exceptions.QError: .s.sp

>>> pykx.q('l s.k_')
pykx.Identity(pykx.q('::'))
>>> kx.q.sql('select * from trades')
pykx.Table(pykx.q('
sym mcap ex
-------------------
ibm 2000 nasdaq
msft 4000 nasdaq
apple 9000 DAX
samsung 6000 Dow
'))


Do I need to add “pykx.q(‘l s.k_’)” command before every kx.q.sql query?

No it only needs to be done once.

 

Normally importing PyKX should run it automatically but for some reason your install does not do this.

Can you run:

 

>>> pykx.q('l s.k_')

 

If that still fails check

 

>>> import os 
>>> os.environ["QHOME"] 
'/home/user/folder/venv/lib/python3.10/site-packages/pykx/lib' 
>>> os.listdir(os.environ["QHOME"]) 
['write.q', 'm64arm', 'p.q', 'l64arm', 'l64', 'kxic.k', '_update_marker', 'bq.q_', 'csvutil.q', 'kurl.q_', 'q.k', 's.k_', 'w64', 'qlog.q_', 'm64', 'objstor.q_', 'read.q', 'rest.q_', 'kurl.sidecar.q_']

 

PyKX 1.6.0 includes a utility for inspecting these common areas pykx.util.debug_environment(detailed=True)