您的位置:首页 > 编程语言 > Python开发

python manage.py migrate 出错 django.db.utils.ProgrammingError

2017-03-17 06:55 615 查看
django migrate 出错 django.db.utils.ProgrammingError: (1146, u"Table 'myblog2.blog_article' doesn't exist")

在用django写一个博客系统时,自动创建数据库表格,出现上述错误

python manage.py makemigrations


Migrations for 'blog':

  blog/migrations/0011_auto_20170317_0608.py:

    - Alter field upload_time on article

python manage.py migrate

。。。
django.db.utils.ProgrammingError: (1146, u"Table 'myblog2.blog_article' doesn't exist")

----------------------------------------------
原因是myblog2.blog_article这个表格的字段发生了修改

我是用如下方法解决的:
1、删除mysql中的数据库myblog2
mysql -u root -p


Enter password: 

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 176

Server version: 5.1.73-log Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| awesome            |

| djangohotel        |

| miniblog           |

| myblog             |

| myblog2            |

| mysql              |

| signup_test        |

| signup_test1       |

| signup_test2       |

| signup_test3       |

| signup_test4       |

| sugnup_test2       |

| test               |

+--------------------+

14 rows in set (0.03 sec)

mysql> drop database myblog2;

Query OK, 13 rows affected (0.26 sec)

mysql> Ctrl-C -- exit!

Aborted

2、创建采用pymysql自动生成数据库的createdatabase.py文件:
#coding:utf-8
#!/usr/bin/env python
import os
import re
import sys
import pymysql
from importlib import import_module

# search the dirname of settings.py and import it
with open('manage.py') as f:
    s = f.read()
d = re.search(r'DJANGO_SETTINGS_MODULE.*?,\s*"(.+?)\.settings', s).group(1)
assert 'settings.py' in os.listdir(d)
mo = import_module('{d}.settings'.format(d=d))

def getconf(alias='default'):
    dbconf = mo.DATABASES.get(alias)
    config = {'host': dbconf.get('HOST'),
              'user': dbconf.get('USER'),
              'passwd': dbconf.get('PASSWORD'),
              'port': dbconf.get('PORT'),
              'charset': 'utf8', }
    config = {k: v for k, v in config.items() if v is not None}
    db_name = dbconf.get('NAME')
    return config, db_name

def creat_db(config, db_name):
    try:
        conn = pymysql.connect(**config)
        cur = conn.cursor()
        if '-d' in sys.argv:
            cur.execute('drop database {}'.format(db_name))
            print('success to execute `drop database {};`'.format(db_name))
        command = ('create database {} DEFAULT CHARACTER '
                   'SET utf8 COLLATE utf8_general_ci').format(db_name)
        cur.execute(command)
        print('success to execute `{};`'.format(command))
        # conn.select_db(database)
        conn.commit()

        cur.close()
        conn.close()
    except Exception as e:
        print("SQL Error: {e}".format(e=e))

def main():
    creat_db(*getconf())
    # creat_db(*getconf('mysql_property'))

main()
3、执行该文件:
chmod +x createdatabase.py
./createdatabase.py


4、makemigrations 和 migrate :
python manage.py makemigrations
python manage.py migrate


5、总结:估计不删除数据库,只删除那个改动字段的表,也能成功migrate
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐