【问题标题】:Problems with psycopg2 timestamp with time zone and inserting selected data from one database to another带有时区的 psycopg2 时间戳和将选定数据从一个数据库插入另一个数据库的问题
【发布时间】:2021-07-06 08:48:02
【问题描述】:

第一个问题,我使用 Python 中的 psycopg2 库连接到一个数据库并执行此查询。

import psycopg2

conn = psycopg2.connect("dbname=**** user=**** password=**** host=**** port=****")
cur = conn.cursor()

cur.execute("SELECT datname, age(datfrozenxid), current_setting('autovacuum_freeze_max_age'), CURRENT_TIMESTAMP FROM pg_database ORDER BY 2 DESC;")
f = cur.fetchone()
print(f)

它返回这样的结果。

('db_name', 186336925, '200000000', datetime.datetime(2021, 7, 6, 15, 12, 46, 233934, tzinfo=psycopg2.tz.FixedOffsetTimezone(offset=420, name=None)))

我希望它返回带有时区的时间戳结果,就像我在 PostgreSQL 中查询一样。我该怎么办?

第二个问题,我想将上面定义为“f”变量的查询结果插入到我的本地主机数据库中

    conn1 = psycopg2.connect("dbname=**** user=**** password=**** host=localhost port=5432")

with conn1:

    cur1 = conn1.cursor()

    cur1.execute("DROP TABLE IF EXISTS monitor")
    cur1.execute("CREATE TABLE table(datname NAME, age XID, current_setting TEXT, datetime TIMESTAMP)")
    query = "INSERT INTO table (datname, age, current_setting, datetime) VALUES (%s, %s, %s, %s)"
    cur1.executemany(query, f)

    conn1.commit()

但它会返回

TypeError: not all arguments converted during string formatting

我该如何解决?感谢您的帮助。

【问题讨论】:

  • INSERT INTO table (... -->> INSERT INTO monitor (...

标签: python postgresql psycopg2 timestamp-with-timezone


【解决方案1】:

您可以尝试更改查询中的时间戳:

cur.execute("SELECT datname, age(datfrozenxid), current_setting('autovacuum_freeze_max_age'), to_char(CURRENT_TIMESTAMP ,'MM-DD-YYYY HH24:MI:SS')  as t FROM pg_database ORDER BY 2 DESC;")

或者您可以尝试使用“日期时间”模块,检查输出是否为日期时间,然后将格式应用于此值:

import psycopg2
import datetime

conn = psycopg2.connect("dbname=****user=*****password=***** host=****port=****")
cur = conn.cursor()

cur.execute("SELECT datname, age(datfrozenxid), current_setting('autovacuum_freeze_max_age'), CURRENT_TIMESTAMP  FROM pg_database ORDER BY 2 DESC;")
f = cur.fetchone()
for row in f:
    if isinstance(row, datetime.datetime):
        print(row.strftime("%b %d %Y %H:%M:%S"))
    else:
        print(row)

您也可以使用以下链接查看文档:https://docs.python.org/3/library/datetime.html

【讨论】:

    猜你喜欢
    • 2023-04-10
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2015-02-04
    • 2015-03-31
    相关资源
    最近更新 更多