Есть ли простой / эффективный способ динамически создать базу данных mysql, «построить свою собственную структуру», так как она сохраняет пары имя / значение на диск? - PullRequest
0 голосов
/ 22 ноября 2010

Есть ли эффективный и простой способ выполнения операторов, подобных:

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

для столбцов при выполнении операторов вставки.

Я бы предположил, что это будет намного сложнее, но просто ради объяснения, я думаю, я ищу что-то вроде ...

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, которая может обрабатывать процесс?

По сути, я хочу, чтобы идентификаторы словаря определяли столбцы и создавали их, если они еще не существуют.

Я также хотел бы, чтобы база данных оставалась достаточно эффективной, поэтому я думаю, что некоторая динамическая обработка типа данных также будет необходима?

просто интересно, существует ли что-то подобное в данный момент, и если не ищу совета о том, как лучше всего этого достичь ...

1 Ответ

2 голосов
/ 22 ноября 2010

Я считаю, что вы ищете систему реляционного сопоставления объектов.

Для Python есть пара:

Или, если вы создаете веб-сайт, проект Django включает систему ORM: http://www.djangoproject.com/

Чтобы упростить процесс, вы можете добавить что-то вроде Elixir поверх SQLAlchemy: 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)>]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...