代码之家  ›  专栏  ›  技术社区  ›  significance

当MySQL数据库将名称/值对保存到磁盘时,是否有一种简单/有效的方法来动态地“构建它自己的结构”?

  •  0
  • significance  · 技术社区  · 15 年前

    是否有任何有效和简单的方法来执行类似于以下内容的语句:

    CREATE TABLE IF NOT EXISTS fubar ( id int, name varchar(80))
    

    对于执行INSERT语句的列。

    我想这会更复杂,但为了解释,我想我在找……之类的东西。

    IF NOT EXISTS
    (
      SELECT * FROM information_schema.COLUMNS
      WHERE 
        COLUMN_NAME='new_column' AND 
        TABLE_NAME='the_table' AND 
        TABLE_SCHEMA='the_schema'
    )
    THEN
      ALTER TABLE `the_schema`.`the_table`
      ADD COLUMN `new_column` bigint(20) unsigned NOT NULL default 1;
    

    或者,有没有一种可以处理该过程的Python库?

    基本上,我希望“dictionary”的“id”定义列,并在它们不存在时创建它们。

    我也希望数据库保持合理的效率,所以我想对数据类型进行一些动态处理也是必要的?

    只是想知道现在是否存在这样的事情,如果不寻求关于如何最好地实现它的建议……

    1 回复  |  直到 10 年前
        1
  •  2
  •   Wolph    15 年前

    我相信您正在寻找一个对象关系映射系统。

    对于python,有几个可用的:

    或者,如果您正在构建一个网站,Django项目包括一个ORM系统: http://www.djangoproject.com/

    为了简化过程,可以在sqlAlchemy的基础上添加类似elixir的内容: http://elixir.ematia.de/trac/wiki

    您将得到如下代码:

    class Movie(Entity):
        title = Field(Unicode(30))
        year = Field(Integer)
        description = Field(UnicodeText)
    

    这是如何插入:

    >>> Movie(title=u"Blade Runner", year=1982)
    <Movie "Blade Runner" (1982)>
    >>> session.commit()
    

    或获取结果:

    >>> Movie.query.all()
    [<Movie "Blade Runner" (1982)>]