prestodb / presto-python-client

Python DB-API client for Presto
Apache License 2.0
239 stars 87 forks source link

Cannot create table #84

Open wayjjpku opened 5 years ago

wayjjpku commented 5 years ago

At first, i ran the code as showed below, it's ok, but with warnings:

C:\Users\xxxx\AppData\Roaming\Python\Python36\site-packages\urllib3\connectionpool.py:847: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings
  InsecureRequestWarning)**

import prestodb
conn =  prestodb.dbapi.connect(
    host='172.29.XX.XXX',
    port=1000,
    user='XXX@XXX.com.cn',
    catalog='hive',
    http_scheme='https',
    auth=prestodb.auth.BasicAuthentication(username="XXX@XXX.com.cn",password="AAA"),

   #isolation_level=prestodb.transaction.IsolationLevel.
)
cur = conn.cursor()
cur.execute(""" select *  from  tmp_qiyejinrong.cs201901701_345""")
rows = cur.fetchall()
column_names = [desc[0] for desc in cur.description]
df = pd.DataFrame(rows, columns = column_names)

but when i run the code using create table or drop table , it comes out nothing!!!:

import prestodb

conn =  prestodb.dbapi.connect(
    host='172.29.XX.XXX',
    port=1000,
    user='XXX@XXX.com.cn',
    catalog='hive',
    http_scheme='https',
    auth=prestodb.auth.BasicAuthentication(username="XXX@XXX.com.cn",password="AAA"),
    #isolation_level=prestodb.transaction.IsolationLevel.
)

cur = conn.cursor()
cur.execute("""CREATE TABLE tmp_qiyejinrong.cs20190701_2 as  select *  from 
ods_zhugexh_bdpms.t_info_user_property cusattr""")

output: <prestodb.client.PrestoResult at 0x4a23358>

cur.execute("""desc tmp_qiyejinrong.cs20190701_2""")

output: <prestodb.client.PrestoResult at 0x4a1a898>

cur.fetchone()

output:

PrestoUserError: PrestoUserError(type=USER_ERROR, name=SYNTAX_ERROR, message="line 1:1: Table 'hive.tmp_qiyejinrong.cs20190701_2' does not exist", query_id=20190701_081811_04498_hhbkj)

by the way, i modify the code only to let verify=False, when the presto platform receive code not like 'select' ,the presto system will use hive to execute the code such as create table or drop table in my company.

ggreg commented 5 years ago

You need to call cur.fetchone() after executing the CREATE TABLE statement.

ggreg commented 5 years ago

The SSL warnings is unrelated to your issue.

ggreg commented 5 years ago

Did you expect CREATE TABLE to be executed synchronously (see also #58) or was cur.fetchonne() only missing?

subbareddydagumati commented 4 years ago

It should execute the CREATE TABLE synchronously like other database modules. currently cur.fetchone() has to be given as a workaround to run the create table statement or any other insert statements.

alexandermalyga commented 2 years ago

I agree with @subbareddydagumati in that other DB API implementations do not require cur.fetchonne() in order to execute statements. The folks over at Trino recently fixed this exact same issue here: https://github.com/trinodb/trino-python-client/pull/220

Could something similar be implemented in the Presto client?