Python Django syncdb在SQLite中工作,在MySQL中失败
我是MySQL的新手,在生产中没有使用Django。我一直在使用SQLite在Windows7下进行开发,并试图将代码转移到运行MySQL的Linux服务器上 当我运行syncdb时,它创建了前三个表,然后抛出了一个错误:Python Django syncdb在SQLite中工作,在MySQL中失败,python,mysql,django,Python,Mysql,Django,我是MySQL的新手,在生产中没有使用Django。我一直在使用SQLite在Windows7下进行开发,并试图将代码转移到运行MySQL的Linux服务器上 当我运行syncdb时,它创建了前三个表,然后抛出了一个错误: Traceback (most recent call last): File "manage.py", line 10, in <module> execute_from_command_line(sys.argv) File "/home/gs
Traceback (most recent call last):
File "manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/core/management/__init__.py", line 399, in execute_from_command_line
utility.execute()
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/core/management/__init__.py", line 392, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/core/management/base.py", line 242, in run_from_argv
self.execute(*args, **options.__dict__)
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/core/management/base.py", line 285, in execute
output = self.handle(*args, **options)
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/core/management/base.py", line 415, in handle
return self.handle_noargs(**options)
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/core/management/commands/syncdb.py", line 96, in handle_noargs
sql, references = connection.creation.sql_create_model(model, self.style, seen_models)
File "/home/gsdemo01/project_file/lib/python3.3/site-packages/django/db/backends/creation.py", line 83, in sql_create_model
model, f, known_models, style)
TypeError: sql_for_inline_foreign_key_references() takes 4 positional arguments but 5 were given
这在SQLite中工作得很好,因此它似乎要么是python连接器包的问题,要么是MySQL本身的问题
提前感谢您的帮助
更新:
通过反复试验,我确定问题肯定出在外键字段上。如果我注释出表是正确创建的。据我所知,Yogesh建议的修改与代码中已有的修改相匹配,因此,如果有人有任何其他建议,我很乐意听取。如果您使用这些病毒Python3.3 Django1.6,请使用MySql官方中间件MySql-connector-python-1.1.4-py3.3 解决方案: 在站点包和修改方法中查找:creation.py:sql\u for\u inline\u foreign\u key\u引用是:您只能修改方法参数
def sql_for_inline_foreign_key_references (self, model, field, known_models, style):
这不是一个好的解决方案,这是删除错误的替代方案。我在这里发布此解决方案是为了方便将来遇到此问题的用户。我的搭档花了好几个小时才找到答案 解决方案的简单部分是编辑creation.py以进行更改
def sql_for_inline_foreign_key_references (self, model, field, known_models, style):
到
在site packages/django/db/backends/creation.py中有一个具有相同名称和几乎相同语法的例程,但您需要site packages/django/db/backends/mysql/creation.py中的例程
不过,您还没有完成,因为模块会被复制到site packages/mysql/connector/django/creation.py,并且在编辑时不会自动发生,所以您需要手动复制它。我删除了.pyc文件,但“不应该”是必要的
当然,这些都不是必需的…对于使用MacOSX 10.9(又名Mavericks)或更高版本的Mac用户,此解决方案工作得非常完美,但是如果您使用python3从mysql.connector编辑creation.py文件,请确保您的位置正确: 供参考: 环境:Python3/Mysql-connector-1.1.4/Django-1.6.1
我们正在使用所有这些版本。我们按照指定更改了调用(尽管它使用了“f”而不是“field”)。我们得到的只是“sql for_inline_foreign_key_references()接受4个位置参数,但有6个被赋予了”python3.3/site-packages/django/db/backends/creation.py replace def sql_for_inline_foreign_key_references(self、model、field、known_models、style):我想我以前找错地方了。这就是我在安装中对该定义的定义:def sql_for_inline_foreign_key_references(self、model、field、known_models、style):我看不出这与您的建议有什么不同。我需要改变什么?
def sql_for_inline_foreign_key_references (self, model, field, known_models, style):
def sql_for_inline_foreign_key_references (self, *args):
/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/mysql/connector/django/creation.py