Python 随机名称生成器策略-帮助我改进它

Python 随机名称生成器策略-帮助我改进它,python,mysql,random,web.py,Python,Mysql,Random,Web.py,我有一个使用web.py的Python小项目。它是一个名称生成器,使用名称的4个“部分”(firstname、middlename、anothername、names)。名称的每个部分都是MySQL数据库中的实体集合(name\u part(id,part,type\u id),以及name\u part\u type(id,description))。基本的东西,我想 我的生成器随机选取每个“类型”的条目,并组合一个滑稽的名称。现在,我正在使用select*from name\u part,其

我有一个使用web.py的Python小项目。它是一个名称生成器,使用名称的4个“部分”(
firstname、middlename、anothername、names
)。名称的每个部分都是MySQL数据库中的实体集合(
name\u part(id,part,type\u id)
,以及
name\u part\u type(id,description)
)。基本的东西,我想

我的生成器随机选取每个“类型”的条目,并组合一个滑稽的名称。现在,我正在使用
select*from name\u part,其中type\u id=[something]order by rand()limit 1
来选择每种类型的随机条目(因此,我还有4个查询,每个页面视图运行,我认为这比一个可能返回数百行的fat查询要好;如果您有关于如何在一个没有存储过程的查询中实现这一点的建议,我将倾听)

显然,我想让它更随机。实际上,我想给它更好的覆盖率,而不一定是随机性。我想确保它使用尽可能多的可能性。这就是我在这个问题中要问的,我可以使用什么样的策略来覆盖一个大的随机样本

我的想法是在每个
name\u部件上实现一个计数器列,并在每次使用它时递增。我需要一些逻辑,然后说:“获取一个小于此“name\u部件类型”的最高“计数器”的name\u部件,除非没有计数器,然后随机选取一个”。我不太擅长SQL,这种逻辑可能吗?我认为这样做的唯一方法是对名称的每个部分进行最多3或4次查询(因此每个页面视图最多12次查询)

我能在这里得到一些关于我的逻辑的输入吗?我是不是想得太多了?这听起来确实是存储过程的理想选择…但你们能至少帮我解决一下如何在没有存储过程的情况下完成它吗?(我不知道我是否能用存储过程来处理内置的web.py数据库)

我希望这不是非常愚蠢,但提前谢谢你


编辑:除了我的具体问题,我仍然很好奇是否有其他更好的策略可以使用。

我想你想要的是:

select * from name_part
    where type_id=[something]
    order by used_count asc, rand()
    limit 1

这将把较少使用的名称放在列表的顶部,如果有相同(最低)使用计数的倍数,它们将随机排序。

我同意您的直觉,使用存储过程是正确的方法,但是,我几乎总是尝试在数据库中实现数据库内容


在您的过程中,我会引入一些逻辑,比如说,返回结果实际增加计数器的概率只有30%。只是为了增加可变性。

这听起来是个好主意。我的下一步是学习类似ORM的SqlAlchemy,它支持存储过程(对吗?),然后我将实现这一点。现在我仍然可以在python中实现增加计数器的随机性。谢谢!或者如果您想要更多的随机性,ORDER BY number_of_使用+RAND()*3(或其他一些偏置常数)。