我可以将 Trino 中的数据提取到 Python 中并对其进行操作,但是当我尝试将操作后的数据上传到新表中时,没有提交任何内容。我可以在 DBeaver 中删除/创建同一个表,但是如果我尝试做一些像通过 python 删除表一样简单的事情 - 它不起作用。我没有收到错误,但没有提交任何内容。
有效的代码示例:
# Importing required packages
from trino.dbapi import connect
from trino.auth import BasicAuthentication
# Establishing a connection to Trino
trino_conn=connect(
host='hostname.example.com',
port=8443,
user='user',
catalog='system',
schema='runtime',
http_scheme='https',
auth=BasicAuthentication("username", "password"),
)
trino_conn._http_session.verify = False
cursor = trino_conn.cursor()
query = """
SELECT * FROM db.schema.sample_table
"""
cursor.execute(query)
rows = cursor.fetchall()
columns = [rows[0] for rows in cursor.description]
dataframe = pd.DataFrame(rows, columns=columns)
创建表成功后 DBeaver 中的sample_table_II,以下代码在 Python 中不会删除它:
# Importing required packages
from trino.dbapi import connect
from trino.auth import BasicAuthentication
# Establishing a connection to Trino
trino_conn=connect(
host='hostname.example.com',
port=8443,
user='user',
catalog='system',
schema='runtime',
http_scheme='https',
auth=BasicAuthentication("username", "password"),
)
trino_conn._http_session.verify = False
cursor = trino_conn.cursor()
cursor.execute("DROP TABLE db.schema.sample_table_II")
trino_conn.commit()
请记住,当我使用 Teradata 时,cursor.commit() 对我来说效果很好:
import teradatasql
teradata_conn = teradatasql.connect(host='hostname.example.com', user='XXXXXXXXXX', password='XXXXXXXXXX')
cursor = teradata_conn.cursor()
我猜我工作的环境与 trino 包有太多依赖关系,因为当我通过以下方式创建新环境时:
conda create -n trino_env python=3.7 anaconda
conda activate trino_env
然后使用:
pip install trino
Python 能够提交我尝试对数据库所做的更改。
遇到同样的问题,但无法更新 python 后,我在 Trino Github 中偶然发现了这一点:
https://github.com/trinodb/trino-python-client/issues/232
我的解决方案是在 cur.execute(statement) 之后添加 cur.fetchone()