python - 字符串解析与数据库查询

标签 python mysql string-parsing

我有一个包含以下数据的 MySQL 表:

TempID    TempName       TempString 
1         aaa            34:56:23:45:67:55
2         bbb            12:56:67:45:33:99

我想要执行一项计算,需要将 TempString 拆分为各个值,例如 34、56、23...。

最好的方法是:

  1. 在 python 中进行字符串解析并使用其值
  2. 用于存储带有TempID的值的单独表

    ValID     TempID     Value
    1         1          34
    2         1          56
    3         1          23
    4         1          45
    5         1          67
    6         1          55
    7         2          12
    8         2          56
    9         2          67
    

    查询获取每个TempID的值并进行计算

请建议执行此操作的最佳方法。

最佳答案

嗯,最大的问题是,破坏这些值在语义上是否正确?

设计数据库表时,需要考虑每一列的域定义。一列中存储的每个数据项都应该是原子的(不可分解的)。这意味着存储在列中的项目是为特定列定义的域的元素。这可以称为域完整性约束(查看维基百科文章data integrity以获取更多信息)。

您可以使用简单的启发式方法来帮助做出最终决定:您是否曾经需要或将需要使用存储的字符串的一部分进行搜索,即在 where 内部条款。如果是,则将字符串分成单独的表列,否则只需使用 Python 对其进行解析。

破坏域完整性的一个简单示例是使用一个表来存储博客文章,其中单个帖子的所有标签都连接成一个大字符串并仅存储在一行中,而不是使用一个单独的表将帖子连接到标签。

可以将相对复杂的值存储到一列中的一个明显例子是存储日期。即使它由多个值组成,但如果没有有关年、月、日的所有信息,完整的日期也是不完整的(原子的)......

关于python - 字符串解析与数据库查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24116898/

相关文章:

python - 聚合数据框列

php - SQL 注入(inject)无法正常工作

mysql - 在 MySQL 中使用指示列按顺序、分组和按日期枚举记录

检查 C 中的空行 - 正则表达式

android - 如何从android中的json对象中删除和解析空字符串并显示为列表

python - module.__init__() takes at most 2 arguments 错误在Python

python - 按最后一个有效项目对 df 进行子集

php - 重复从数据库中选择下拉列表值

c++ - 提取字符串中出现的前两个整数 C++

python - 理解 Python super() 和 __init__() 方法