如何将 python class 转换为 table postgres
How to convert python class to table postgres
我一直在寻找关于如何从 Python class 在数据库中制作 table 的信息很长时间,但我没有找到很好的解释
我一直在找例子,但是描述有限,例子很难理解
我想不用sqlalchemy等框架实现
class User:
tablename = "user"
name = CharField(..)
def create_table(
sql_query: str,
conn: psycopg2.extensions.connection,
cur: psycopg2.extensions.cursor
) -> None:
try:
# Execute the table creation query
cur.execute(sql_query)
except Exception as e:
print(f"{type(e).__name__}: {e}")
print(f"Query: {cur.query}")
conn.rollback()
cur.close()
else:
# To take effect, changes need be committed to the database
conn.commit()
class 用户 -> postgres table
您将必须连接到数据库并使用 postgresSQL 告诉数据库如何构造 table(s)。只需使 table 属性与您的 class 属性相同即可。
您的 table SQL 将类似于:
CREATE TABLE [IF NOT EXISTS] table_name (
class_attribute datatype(length) column_constraint,
class_attribute datatype(length) column_constraint,
class_attribute datatype(length) column_constraint,
table_constraints
);
如果您想编写自己的 postgresSQL DBMS 接口,您需要对关系数据库有很好的理解。如果您决定要现成的解决方案,请尝试 psycopg。
如果你想走这条路,请看一看 attrs:
@attr.s
class C(object):
x = attr.ib(type=int)
y = attr.ib(type=str)
flds = attr.fields(C)
flds
(Attribute(name='x', default=NOTHING, validator=None, repr=True, eq=True, order=True, hash=None, init=True, metadata=mappingproxy({}), type=<class 'int'>, converter=None, kw_only=False),
Attribute(name='y', default=NOTHING, validator=None, repr=True, eq=True, order=True, hash=None, init=True, metadata=mappingproxy({}), type=<class 'str'>, converter=None, kw_only=False))
flds[0].name
'x'
flds[0].type
int
用于添加元数据,例如table 姓名见 Metadata.
您必须创建一个转换代码,该代码采用 Python 类型并映射到 SQL 类型字符串。
老实说,我的建议是不要使用自己自制的溶液走这条路。有很多 ORM 可以为您完成这项工作,而无需为让您的代码保持最新而头疼。如果你想要更小的东西,那么 SQLAlchemy 看看 peewee。
我自己的偏好是使用 Sqitch.
将我的 DDL 保留为 SQL 脚本
我一直在寻找关于如何从 Python class 在数据库中制作 table 的信息很长时间,但我没有找到很好的解释
我一直在找例子,但是描述有限,例子很难理解
我想不用sqlalchemy等框架实现
class User:
tablename = "user"
name = CharField(..)
def create_table(
sql_query: str,
conn: psycopg2.extensions.connection,
cur: psycopg2.extensions.cursor
) -> None:
try:
# Execute the table creation query
cur.execute(sql_query)
except Exception as e:
print(f"{type(e).__name__}: {e}")
print(f"Query: {cur.query}")
conn.rollback()
cur.close()
else:
# To take effect, changes need be committed to the database
conn.commit()
class 用户 -> postgres table
您将必须连接到数据库并使用 postgresSQL 告诉数据库如何构造 table(s)。只需使 table 属性与您的 class 属性相同即可。
您的 table SQL 将类似于:
CREATE TABLE [IF NOT EXISTS] table_name (
class_attribute datatype(length) column_constraint,
class_attribute datatype(length) column_constraint,
class_attribute datatype(length) column_constraint,
table_constraints
);
如果您想编写自己的 postgresSQL DBMS 接口,您需要对关系数据库有很好的理解。如果您决定要现成的解决方案,请尝试 psycopg。
如果你想走这条路,请看一看 attrs:
@attr.s
class C(object):
x = attr.ib(type=int)
y = attr.ib(type=str)
flds = attr.fields(C)
flds
(Attribute(name='x', default=NOTHING, validator=None, repr=True, eq=True, order=True, hash=None, init=True, metadata=mappingproxy({}), type=<class 'int'>, converter=None, kw_only=False),
Attribute(name='y', default=NOTHING, validator=None, repr=True, eq=True, order=True, hash=None, init=True, metadata=mappingproxy({}), type=<class 'str'>, converter=None, kw_only=False))
flds[0].name
'x'
flds[0].type
int
用于添加元数据,例如table 姓名见 Metadata.
您必须创建一个转换代码,该代码采用 Python 类型并映射到 SQL 类型字符串。
老实说,我的建议是不要使用自己自制的溶液走这条路。有很多 ORM 可以为您完成这项工作,而无需为让您的代码保持最新而头疼。如果你想要更小的东西,那么 SQLAlchemy 看看 peewee。
我自己的偏好是使用 Sqitch.
将我的 DDL 保留为 SQL 脚本