So, I have a running project that uses a MySQL database with a MAMP local server but for compliance issues I need to change the database name. So I changed it in MAMP and I changed it in settings.py as seen bellow:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'prototipodb', # Or path to database file if using sqlite3.
'USER': 'palapa', # Not used with sqlite3.
'PASSWORD': 'palapa', # Not used with sqlite3.
'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
}
}
I thought that with these changes everything would keep running smoothly, but I got the following error on my server:
Unhandled exception in thread started by >
Traceback (most recent call last):
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/core/management/commands/runserver.py", line 91, in inner_run
self.validate(display_num_errors=True)
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/core/management/base.py", line 266, in validate
num_errors = get_validation_errors(s, app)
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/core/management/validation.py", line 103, in get_validation_errors
connection.validation.validate_field(e, opts, f)
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/db/backends/mysql/validation.py", line 14, in validate_field
db_version = self.connection.get_server_version()
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 415, in get_server_version
self.cursor().close()
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/db/backends/init.py", line 306, in cursor
cursor = self.make_debug_cursor(self._cursor())
File "/Users/palapa2/projects/prototipo_tesis/venv/lib/python2.7/site-packages/django/db/backends/mysql/base.py", line 387, in _cursor
self.connection = Database.connect(**kwargs)
File "build/bdist.macosx-10.9-intel/egg/MySQLdb/init.py", line 81, in Connect
File "build/bdist.macosx-10.9-intel/egg/MySQLdb/connections.py", line 193, in init
_mysql_exceptions.OperationalError: (1049, "Unknown database 'prototipodb'")
I would appreciate if you can help me with this problem. One of the things I've been thinking about doing is run syncbd command to rebuild the connection, but if there is a better solution to this I would gladly consider it.
I just did this on my mac and it works fine. I copied the DB and changed the name in settings.py. Then I gave my user access to the new DB.`
Did you give user palapa access to the new DB?
Did you flush privileges?
Did you restart Django server?
Related
I have deployed my Django app to Google Cloud. It worked fine when I hosted it locally and throughout the steps outlined in this post.
It raises a server Error(500) when I try to view the live link.
When I enable Debug in the settings.py, this is the full traceback. (Torque is the name of my project), and showroom is my app.
The traceback refers to a views attribute (num_manufactureres) which I never had a problem with when hosting it locally.
OperationalError at /showroom/
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Request Method: GET
Request URL: https://torque-256805.appspot.com/showroom/
Django Version: 2.2.5
Exception Type: OperationalError
Exception Value:
(2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Exception Location: /env/lib/python3.7/site-packages/MySQLdb/connections.py in __init__, line 166
Python Executable: /env/bin/python3.7
Python Version: 3.7.4
Python Path:
['/srv',
'/env/bin',
'/opt/python3.7/lib/python37.zip',
'/opt/python3.7/lib/python3.7',
'/opt/python3.7/lib/python3.7/lib-dynload',
'/env/lib/python3.7/site-packages']
Server time: Thu, 24 Oct 2019 09:45:29 +0300
...
/env/lib/python3.7/site-packages/MySQLdb/__init__.py in Connect
return Connection(*args, **kwargs) …
▶ Local vars
/env/lib/python3.7/site-packages/MySQLdb/connections.py in __init__
super(Connection, self).__init__(*args, **kwargs2) …
▶ Local vars
...
num_manufacturers = Manufacturer.objects.all().count() …
▶ Local vars
I'm new to Google Cloud, so I don't know how to start debugging this.
Here are some possible issues:
The server instance I created on the cloud.google.com uses europe-west3 as a region. But when I was deploying, I thought that it created a completely new server and chose europe-west6 as a better option. (Close proximity, better reliability etc...)
I changed my project settings.py for better security according to the check --deploy Django command.
Otherwise, I can't think of anything else. Can anyone help?
Check out this Django example on App Engine settings.py file:
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/[YOUR-CONNECTION-NAME]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
'NAME': '[YOUR-DATABASE]',
}
}
else:
# Running locally so connect to either a local MySQL instance or connect to
# Cloud SQL via the proxy. To start the proxy via command line:
#
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
#
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': '[YOUR-DATABASE]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
}
}
Last but not least, if you're running your app locally, make sure you have ALLOWED_HOSTS= ['localhost'] if your database host is HOST='localhost', or else you can just use 'HOST': '127.0.0.1', as shown in the code sample above.
I'm trying to make Django work under Windows 10 but connecting with my (often used) off-site Mysql server I get
django.db.utils.OperationalError: (2006, "Can't connect to MySQL server on 'localhost' (10061)")
While (like I used to do) state in my config file (mysql.conf) to which is pointed to by my settings.py like I used a thousand times before:
[client]
host = 10.8.0.1
database = sitesv
user = niels
password = xxx
port = 3306
default-character-set = utf8
Whether I use the ip within '' or I use a name which is known in my hosts file I still get the same stupid error.... I'm not trying localhost!
In site/settings.py I (still) have:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'OPTIONS': {
'read_default_file': BASE_DIR+'\sv\mysql.conf',
},
}
}
With 'still' I mean that I am not frustrated but just halted by some minor mistake which I don't see. ;)
I usually use SQLite but this project requires me to use data from a server so instead of trying to convert the data from SQLite to MySQL, I imported the data into my local MySQL database. I am trying to figure out how to configure my Django project to work with the imported database. Right now the models.py file is empty.
So I have three questions:
Is my settings.py (below) set up correctly?
Do I need to set up the models to match the schema in the imported
database?
Do I need to do anything else?
This is what I'm working with:
Django 1.8.4
Python 2.7
mysql 5.7.14
osx 10.11
settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
"""..."""
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'extract',
'USER': 'root',
'PASSWORD': 'xxxxxxxxxx',
'HOST': 'localhost',
'PORT': '22',
}
}
""" ... """
You can try ./manage.py inspectdb after mentioning mysql database in settings.py. have a look at docs here
I know there are tones of questions like that but sadly none of them resolved my problems and as I am new to django I don't know what is wrong.
So I installed django and mysql successfully, then the django-mysql package. When try to import the MySQLdb in python (running in the terminal) it works.
But my question is: how do you start mysql and create a database? And how to "link" it to django?
I tried running mysql but it doesn't work. So I tried /usr/local/mysql/bin/mysql which throws an error ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2).
What do I have to do?
Check your system preferences - there should be a MySQL icon on the bottom. There you can start it.
Also I recommend to install MySQLWorkbench to manage your db
I think that #init3 already answered the question regarding how to start mysql. How do you "link" your database to a django project? Well, in your settings.py file you find something like this:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'my_database_name', # Or path to database file if using sqlite3.
'USER': 'my_mysql_user', # Not used with sqlite3.
'PASSWORD': 'my_mysql_password', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
So change NAME, USER and PASSWORD accordingly and Django will use that database to create tables and populate fields.
I am trying to configure mysql with my Django project-ecomstore and I get the error given in the title,
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #
'NAME': 'ecomstore', # Or path to database file if using sqlite3.
'USER': 'root', # Not used with sqlite3.
'PASSWORD': 'password', # Not used with sqlite3.
'HOST': '', # Set to empty string for localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for default. Not used with sqlite3.
}
}
Error:
C:\Python27\Djangoprojects\ecomstore>python manage.py dbshell
'mysql' is not recognized as an internal or external command,
operable program or batch file.
Please provide your inputs.
Just use 'ENGINE': 'mysql',. That's how my current app has it.
This simply means that the ‘mysql’ excutable command file (mysql.exe) was not added to your system path therefore the system was unable to locate this file. To add the ‘mysql’ to system path try to locate the ‘mysql’ resident folder.
Seems you are using windows, here are the steps:
1) go to Control Panel -> System and Security -> System
2)paste "mysql resident folder path" into Variable value: field of Edit System Variable pop up.
python manage.py dbshell is just a shortcut for mysql -d DATABASENAME -u USERNAME -p PASSWORD and you will need to have mysql installed on your system and that mysql command should be able to run from the console.