QuestDB可以把psycopg2的数据放进去建表吗?
就像您使用 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 its columns values")
for row in records:
print("y = ", row[0], row[1], row[2], "\n")
当然应该实现错误处理,你不需要在每次插入后都提交,但是那个例子应该帮助你使用 postgresql 协议插入数据。
另一个细节是我正在使用 WAL 参数创建表。我这样做是因为 WAL 表在使用 postgresql 协议时可以接受并发插入,但在这种情况下非 WAL 表会被锁定。更多信息,请访问https://questdb.io/docs/concept/write-ahead-log/
下面是如何使用 psycopg2 在 QuestDB 中创建表并向其中插入一些数据的示例:
import psycopg2
# Connect to the PostgreSQL database using psycopg2
conn = psycopg2.connect(
host="your_host",
database="your_database",
user="your_username",
password="your_password"
)
# Create a cursor object to interact with the database
cur = conn.cursor()
# Create a table in QuestDB
cur.execute("CREATE TABLE my_table (id SERIAL PRIMARY KEY, name VARCHAR(50), age INT)")
# Insert some data into the table
cur.execute("INSERT INTO my_table (name, age) VALUES (%s, %s)", ("John Doe", 30))
cur.execute("INSERT INTO my_table (name, age) VALUES (%s, %s)", ("Jane Doe", 25))
# Commit the changes to the database
conn.commit()
# Close the cursor and connection objects
cur.close()
conn.close()
在这个例子中,我们首先使用 psycopg2.connect() 函数连接到 PostgreSQL 数据库。然后我们使用 conn.cursor() 方法创建一个游标对象,它允许我们与数据库进行交互。
我们使用 cur.execute() 方法来执行 SQL 命令。在这种情况下,我们首先创建一个名为 my_table 的表,其中包含三列:id(一个串行主键)、name(一个字符串)和 age(一个整数)。然后我们使用 INSERT INTO 命令将两行数据插入到表中。
最后,我们使用 conn.commit() 方法将更改提交到数据库,并分别使用 cur.close() 和 conn.close() 方法关闭游标和连接对象。