根据这个问题(Dynamic Models in Phoenix Framework),可以使用Module.create在Elixir中动态创建模型。
可以在Phoenix / Elixir的运行时期间在数据库中为此模型创建一个表,而无需使用迁移文件吗?
答案 0 :(得分:2)
PostgreSQL
2.0+的 MySQL
和Ecto
适配器具有执行原始SQL的能力:
qry =
"""
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
"""
res = Ecto.Adapters.SQL.query!(Repo, qry, [])
另一种(可能是首选)方式是将此委托给基础mysql
shell可执行文件:
System.cmd("mysql", ["#{create_table_script}"])
答案 1 :(得分:0)
在您的情况下(每月创建新的报表)我会抛弃创建数据库表的想法并考虑使用ETS / DETS组合。它们是键值存储(ETS - 内存中,DETS - 保存在磁盘上的数据 - 这是您基本上需要的),您可以阅读更多关于它们here的信息。