我对SQLAlchemy非常陌生,我喜欢它。现在,我正在手动做很多事情,我想更“pythonically”和动态地做事情。基于SQLAlchemy类自动构建数据库表
所以作为一个例子,我有这个手动创建/定义一个表的简短脚本,然后是一个将数据插入到表中的函数。
数据库连接
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]
所以这里的情景:动态地根据类的成员变量
- 列编号和名称应与给定一个类的对象
- 定义表到变量名称
- 或对应的索引类变量列表变量的
我的直觉告诉我这是什么SQLAlchemy的将是很好的一个功能。有人能告诉我一个很好的教程或参考,可以概述这个过程吗?
你的意思是[声明式对象关系配置](http://docs.sqlalchemy.org/en/rel_0_8/orm/extensions/declarative.html)? –
我不确定我的意思。我是SQLAlchemy的完全noob。 – frankV