psycopg2 - 如何始终将非字符串值转换为字符串

发布于 2024-12-21 09:39:02 字数 573 浏览 0 评论 0原文

psycopg2 的文档有关于如何将特定类型转换为不同类型的说明:

Psycopg 将十进制/数字数据库类型转换为 Python Decimal 对象。我可以用浮动代替吗?
您可以为 PostgreSQL 十进制类型注册自定义适配器:

    DEC2FLOAT = psycopg2.extensions.new_type(
        psycopg2.extensions.DECIMAL.values,
        'DEC2FLOAT',
        lambda value, curs: float(value) if value is not None else None)
    psycopg2.extensions.register_type(DEC2FLOAT)

但是我的数据将混合有 str、float、integer、decimal、date 类型等。我如何告诉 psycopg2 将任何非字符串值转换为字符串?我不想每次遇到新类型时都注册自定义适配器,因为我的查询可能会发生变化。
我希望我能把情况说得足够清楚。 提前致谢。

psycopg2's doc has an instruction on how to cast a specific type to a different type:

Psycopg converts decimal/numeric database types into Python Decimal objects. Can I have float instead?
You can register a customized adapter for PostgreSQL decimal type:

    DEC2FLOAT = psycopg2.extensions.new_type(
        psycopg2.extensions.DECIMAL.values,
        'DEC2FLOAT',
        lambda value, curs: float(value) if value is not None else None)
    psycopg2.extensions.register_type(DEC2FLOAT)

But my data will have a mixture of str, float, integer, decimal, date type, etc. How do i tell psycopg2 to cast any non string value to string? I don't want to register a customized adapter everytime I encounter a new type because my query could change.
I hope I make the situation clear enough.
thanks in advance.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你爱我像她 2024-12-28 09:39:02

您可以删除所有类型转换程序并接收 postgres 字符串表示形式中的所有内容:

import psycopg2

for k in psycopg2.extensions.string_types.keys():
    del psycopg2.extensions.string_types[k]

cnn = psycopg2.connect('')
cur = cnn.cursor()
cur.execute("select 1::int, now()::timestamp, 'hello'::text")
cur.fetchone()
('1', '2011-12-19 16:50:11.396855', 'hello')

You could delete all the typecasters and receive everything in the postgres string representation:

import psycopg2

for k in psycopg2.extensions.string_types.keys():
    del psycopg2.extensions.string_types[k]

cnn = psycopg2.connect('')
cur = cnn.cursor()
cur.execute("select 1::int, now()::timestamp, 'hello'::text")
cur.fetchone()
('1', '2011-12-19 16:50:11.396855', 'hello')
唯憾梦倾城 2024-12-28 09:39:02

也许足够调用 str(object) 或像 object.__str__ 那样获取字段 str

Maybe enough call str(object) or take field str like object.__str__

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文