【发布时间】:2023-02-24 00:01:48
【问题描述】:
QuestDB 可以通过将来自 psycopg2 的数据放入其中来创建表吗?
- 我想使用 psycopg2 初始化表
【问题讨论】:
标签: questdb
QuestDB 可以通过将来自 psycopg2 的数据放入其中来创建表吗?
【问题讨论】:
标签: questdb
就像您使用 PostgreSQL 一样。如果表存在,您可以直接插入。如果该表不存在,则需要先创建它。如果在使用其他协议时不存在该表,QuestDB 将自动创建该表,但使用 Postgres 协议则不会。
这是一个非常简单的例子:
import time
import psycopg2 as pg
conn_str = 'user=admin password=quest host=127.0.0.1 port=8812 dbname=qdb'
with pg.connect(conn_str) as connection:
with connection.cursor() as cur:
cur.execute('''
CREATE TABLE IF NOT EXISTS new_table2(
ts TIMESTAMP, device_code UUID, temperature DOUBLE
) timestamp(ts) PARTITION BY DAY WAL;
''')
timestamp = time.time_ns() // 1000
cur.execute('''
INSERT INTO new_table2
VALUES (%s, %s, %s);
''',
(timestamp, 'ab632aba-be36-43e5-a4a0-4895e9cd3f0d', 79))
connection.commit()
time.sleep(0.5)
cur.execute('SELECT * FROM new_table2')
print('Selecting rows from test table using cursor.fetchall')
records = cur.fetchall()
print("Print each row and it's columns values")
for row in records:
print("y = ", row[0], row[1], row[2], "
")
当然应该实现错误处理,并且您不需要在每次插入后都提交,但是该示例应该可以帮助您使用 postgresql 协议插入数据。
另一个细节是我正在使用 WAL 参数创建表。我这样做是因为 WAL 表在使用 postgresql 协议时可以接受并发插入,但非 WAL 表在这种情况下会获得锁。更多信息请访问https://questdb.io/docs/concept/write-ahead-log/
【讨论】: