gpt4 book ai didi

python - 使用 SQLAlchemy 基于类自动构建数据库表

转载 作者:太空狗 更新时间:2023-10-30 01:49:05 24 4
gpt4 key购买 nike

我是 SQLAlchemy 的新手,但我喜欢它。现在我正在手动做很多事情,我想做一些更“ python 式”和动态的事情。

举个例子,我有这个简短的脚本,它手动创建/定义一个表,然后是一个将数据插入该表的函数。

数据库连接

import os
from sqlalchemy import *
from sqlalchemy import schema, types
from sqlalchemy.ext.declarative import declarative_base

db_url = os.environ.get('DATABASE_URL')
engine = create_engine(db_url)
Base = declarative_base(engine)
meta = Base.metadata

表定义

file_paths = Table('file_paths', meta,
Column('table_id', Integer, primary_key = True),
Column('fullpath', String(255)),
Column('filename', String(255)),
Column('extension', String(255)),
Column('created', String(255)),
Column('modified', String(255)),
Column('size', Integer),
Column('owner', String(255)),
Column('permissions', Integer),
mysql_engine='InnoDB',
)
file_paths.drop(engine, checkfirst = False)
file_paths.create(engine, checkfirst = True)

插入函数接受一个字符串和一个列表作为参数

def push_to_db(fullpath, fileInfo):
i = file_paths.insert()
i.execute( fullpath = str(fullpath),
filename = str(fileInfo[0]),
extension = str(fileInfo[1]),
created = str(fileInfo[2]),
modified = str(fileInfo[3]),
size = str(fileInfo[4]),
owner = str(fileInfo[5]),
permissions = str(fileInfo[6]),
)

这行得通,但它很丑陋,而且是从我在网上某处找到的教程中取出来的。我的目标是使这些操作动态化。

示例类

class FileMeta(object):
def __init__(self, fullPathFileName, filename):
self.fullPathFileName = fullPathFileName
self.filename = filename
self.extension = os.path.splitext(self.filename)[1].lower()
...

def fileMetaList(self):
return [self.filename, self.extension, self.created, self.modified,\
self.size, self.owner, self.permissions]

场景是这样的:给定一个类对象

  1. 根据类成员变量动态定义表
    • 列号和名称应与变量名相对应
    • 或对应于该变量在类变量列表中的索引
  2. 编写一个函数,可以将类中的数据插入到相应的动态创建的表中

我的直觉告诉我这就是 SQLAlchemy 的用武之地。谁能告诉我可以概述此过程的好的教程或引用资料?

最佳答案

您想使用 declarative extension相反:

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class FilePaths(Base):
__tablename__ = 'file_paths'
__table_args__ = {'mysql_engine':'InnoDB'}

table_id = Column(Integer, primary_key=True)
fullpath = Column(String(255))
filename = Column(String(255))
extension = Column(String(255))
created = Column(String(255))
modified = Column(String(255))
size = Column(Integer)
owner = Column(String(255))
permissions = Column(Integer)

Base.metadata.create_all(engine)

您可以根据需要定义自己的 __init__() 以及其他方法,然后创建这些方法的实例以插入新行。

参见 SQLAlchemy's own ORM tutorial .

关于python - 使用 SQLAlchemy 基于类自动构建数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16575153/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com