2015-07-10 143 views
2

我試圖按照Django網站上的「編寫你的第一個Django應用程序」教程,我被困在第2部分關於數據庫的東西。Django遷移MySQL錯誤

我正在運行Ubuntu 14.04和Python 3.4。

我已經安裝了MySQL和Python的MySQL的庫並提出在MySQL數據庫中名爲testdb的,但試圖運行命令時

python3 manage.py migrate 

我得到以下錯誤:

server1:~/Desktop/app/mysite$ python3 manage.py migrate 
Traceback (most recent call last): 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/mysql/base.py", line 124, in execute 
    return self.cursor.execute(query, args) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 207, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/connections.py", line 37, in defaulterrorhandler 
    raise errorvalue 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 192, in execute 
    r = self._query(query) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 355, in _query 
    rowcount = self._do_query(q) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 319, in _do_query 
    db.query(q) 
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1") 

The above exception was the direct cause of the following exception: 

Traceback (most recent call last): 
    File "manage.py", line 10, in <module> 
    execute_from_command_line(sys.argv) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 338, in execute_from_command_line 
    utility.execute() 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/__init__.py", line 330, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 393, in run_from_argv 
    self.execute(*args, **cmd_options) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/base.py", line 444, in execute 
    output = self.handle(*args, **options) 
    File "/usr/local/lib/python3.4/dist-packages/django/core/management/commands/migrate.py", line 93, in handle 
    executor = MigrationExecutor(connection, self.migration_progress_callback) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/executor.py", line 19, in __init__ 
    self.loader = MigrationLoader(self.connection) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/loader.py", line 47, in __init__ 
    self.build_graph() 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/loader.py", line 182, in build_graph 
    self.applied_migrations = recorder.applied_migrations() 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/recorder.py", line 59, in applied_migrations 
    self.ensure_schema() 
    File "/usr/local/lib/python3.4/dist-packages/django/db/migrations/recorder.py", line 53, in ensure_schema 
    editor.create_model(self.Migration) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/base/schema.py", line 289, in create_model 
    self.deferred_sql.extend(self._model_indexes_sql(model)) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/mysql/schema.py", line 55, in _model_indexes_sql 
    self.connection.cursor(), model._meta.db_table 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/mysql/introspection.py", line 142, in get_storage_engine 
"WHERE table_name = %s", [table_name]) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/utils.py", line 79, in execute 
    return super(CursorDebugWrapper, self).execute(sql, params) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/utils.py", line 97, in __exit__ 
six.reraise(dj_exc_type, dj_exc_value, traceback) 
    File "/usr/local/lib/python3.4/dist-packages/django/utils/six.py", line 658, in reraise 
raise value.with_traceback(tb) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/utils.py", line 64, in execute 
    return self.cursor.execute(sql, params) 
    File "/usr/local/lib/python3.4/dist-packages/django/db/backends/mysql/base.py", line 124, in execute 
    return self.cursor.execute(query, args) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 207, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/connections.py", line 37, in defaulterrorhandler 
    raise errorvalue 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 192, in execute 
    r = self._query(query) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 355, in _query 
    rowcount = self._do_query(q) 
    File "/usr/local/lib/python3.4/dist-packages/MySQLdb/cursors.py", line 319, in _do_query 
    db.query(q) 
django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1") 

我django中的數據庫設置看起來像這樣

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'testdb', 
     'USER': 'root', 
     'PASSWORD': 'xxxx', 
     'HOST': '127.0.0.1', 
    } 
} 

我對b做出的唯一更改ase django項目模板是添加一個應用程序,一些url映射,並對數據庫設置進行更改,並將後端切換到sqlite工作正常。

任何幫助搞清楚這將是很棒,謝謝。

編輯:這是我安裝的應用程序,網址,我還沒有任何模型。

settings.py

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
) 

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware', 
    'django.middleware.common.CommonMiddleware', 
    'django.middleware.csrf.CsrfViewMiddleware', 
    'django.contrib.auth.middleware.AuthenticationMiddleware', 
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.clickjacking.XFrameOptionsMiddleware', 
    'django.middleware.security.SecurityMiddleware', 
) 

項目urls.py

urlpatterns = [ 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^polls/', include('polls.urls')) 
] 

應用urls.py

urlpatterns = [url(r'^$', views.index, name='index')] 
+0

'_mysql_exceptions.ProgrammingError:(1064,「您的SQL語法錯誤;檢查手冊,該手冊對應於你的MySQL服務器版本,在第一行'%s'附近使用正確的語法')' - 這會給你提示錯誤可能存在的提示。從'settings.py'加入'INSTALLED_APPS'和最後加上'models.py'將會很有幫助。 – cezar

+0

我添加了安裝的應用程序和網址,我的models.py完全是空的。我知道有一個地方的問題,但是當mysql由django生成時,我不知道從哪裏開始尋找。 –

+0

因此,在'%s'附近使用的消息''WHERE table_name =%s',[table_name]'和'語法給了我一個關於空表名的想法。如果'models.py完全爲空'且您的'polls'應用程序不存在INSTALLED_APPS中,您會遷移什麼? - 也許你應該用syncdb創建一個基本的方案? –

回答

1

這個問題似乎一直是一個壞的MySQL連接器。發現從this post.

一個好過盡

sudo apt-get install libmysqlclient-dev 

然後

sudo pip3 install mysqlclient