0

このコマンドを使用してvarcharのサイズを増やすことができることを私は知っています:

alter table TABLE_NAME modify COLUMN_NAME VARCHAR(1024) NOT NULL;

10個のテーブルがあり、各テーブルにvarcharという1つの共通列があり、その名前が「title」であるとします。テーブル名に関係なく実行できるクエリはありますか?それにより、すべてのテーブルのこのフィールドのサイズが更新されますか?

シナリオ:

実際、私はこれを使用しましBaseModelたがAbstract、私のモデルの多くはそれを継承しています。これで、ベースモデルのタイトルの長さを500に更新しました。Manage.py syncdbを実行しても、これらの変更は反映されません。そのため、上記のクエリが必要です。

class TitleAndSlugModel(models.Model):
    title = models.CharField(max_length=500)
    slug = models.SlugField(null=True, blank=True, help_text="The part of the title that is used in the url")
4

3 に答える 3

0

いいえ、でも実際には、テーブルが10個程度であれば、それほど難しくはありません。

#!/bin/bash
{
  echo "USE some_database;"
  for table in TABLE1 TABLE2 ...
  do
    echo "alter table `$table` modify COLUMN_NAME VARCHAR(1024) NOT NULL;"
  done
} | mysql -h ... -u ... -p ...
于 2012-08-08T15:36:46.440 に答える
0

information_schema を使用して DDL ステートメントを SQL スクリプトにダンプし、スクリプトをソースして実行できます。列に文字セット、照合、またはその他のオーバーライドがないと仮定すると、次のようなことができます。

-- alter all varchar columns named title to be varchar(1024)
select concat('ALTER TABLE ',table_schema,'.',table_name,
' MODIFY COLUMN ',column_name,' VARCHAR(1024)',
if(IS_NULLABLE='YES',' NULL',' NOT NULL'),';"') as the_ddl 
into outfile '/tmp/modify_title_columns.sql'
from information_schema.columns 
where table_schema = '<your_schema>' 
and column_name = 'title'
and data_type = 'varchar';

\. /tmp/modify_title_columns.sql
于 2012-08-08T15:43:34.467 に答える
0

SQL 経由で直接行うことはありません...代わりに、すべてのモデルで変更し (例: max_length=1024)、South を使用して移行を行います --> http://south.readthedocs.org/en/0.7.6 /tutorial/part1.html

南==元気

また、South を使用するようにアプリを変換する必要がある場合もあります --> http://south.readthedocs.org/en/0.7.6/convertinganapp.html#converting-an-app

などなど

于 2012-08-08T16:58:31.213 に答える