我一直在寻找关于如何从Python类在数据库中创建表的信息很长一段时间,但我没有找到一个很好的解释
我在找例子,但是描述有限,而且例子很难理解
我想实现不使用框架,如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 User ->postgres表
如果你想沿着这条路走下去,看看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
添加元数据,如表名,请参见metadata .
您必须创建一个转换代码,该代码接受Python类型并映射到SQL类型字符串。
老实说,我的建议是不要用自己的家庭酿造的解决方案走这条路。市面上有很多orm可以帮您完成这些工作,而不会让您为保持代码更新而头痛。如果你想要更小的SQLAlchemy,看看peewee。
我自己的偏好是保留我的DDL作为SQL脚本使用Sqitch。
您必须连接到数据库并使用postgresSQL告诉数据库如何构建表。只需使表属性与类属性相同。
您的表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编写自己的接口,你需要对关系数据库有很好的理解。如果你决定要一个现成的解决方案,请尝试一下。