I manually Deleted my database from pgAdmin now Makemigration doesnt work - python

I am using postgresql as my database and I am using Pgadmin as a management tool. I was having an issue and I learned I need to use "python manage.py myapp zero" So This was universal solution in Stackoverflow for my problem and It didnt work even after whatever I did. So I had the genius idea of deleting the database from pgadmin and recreating again. Since there was nothing important in it. Now I cant makemigration. and Cloning app from Github didnt solve my problem. What can I do?
Main Error I am getting when tried to makemigration:
django.db.migrations.exceptions.BadMigrationError
Edit: I tried to delete my migrations folder from app and run
DELETE FROM django_migrations WHERE app = 'app_name'
command on the database. I got an error there as well
"django_migrations" obeject does not exist. On my database management tool.

If you've deleted the DB then you can go ahead and recreate it.
You're settings.py file should let you know the creds to use for it but the commands for postgres are:
Creating user
$ sudo -u postgres createuser <username>
Creating Database
$ sudo -u postgres createdb <dbname>
Giving the user a password
$ sudo -u postgres psql
psql=# alter user <username> with encrypted password '<password>';
Granting privileges on database
psql=# grant all privileges on database <dbname> to <username> ;

Related

Can't connect mysql database to python via sublime [duplicate]

I am connecting MySQL - 8.0 with MySQL Workbench and getting the below error:
Authentication plugin 'caching_sha2_password' cannot be loaded:
dlopen(/usr/local/mysql/lib/plugin/caching_sha2_password.so, 2): image
not found
I have tried with other client tool as well.
Any solution for this?
you can change the encryption of the password like this.
ALTER USER 'yourusername'#'localhost' IDENTIFIED WITH mysql_native_password BY 'youpassword';
Note: For MAC OS
Open MySQL from System Preferences > Initialize Database >
Type your new password.
Choose 'Use legacy password'
Start the Server again.
Now connect the MySQL Workbench
For Windows 10:
Open the command prompt:
cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
C:\Program Files\MySQL\MySQL Server 8.0\bin> mysql -u root -p
Enter password: *********
mysql> ALTER USER 'root'#'localhost' IDENTIFIED WITH mysql_native_password BY 'newrootpassword';
Query OK, 0 rows affected (0.10 sec)
mysql> exit
Alternatively, you can change the my.ini configuration as the following:
[mysqld]
default_authentication_plugin=mysql_native_password
Restart the MySQL Server and open the Workbench again.
I had the same problem, but the answer by Aman Aggarwal didn't work for me with a Docker container running mysql 8.X.
I loged in the container
docker exec -it CONTAINER_ID bash
then log into mysql as root
mysql --user=root --password
Enter the password for root (Default is 'root')
Finally Run:
ALTER USER 'username' IDENTIFIED WITH mysql_native_password BY 'password';
You're all set.
You can change the encryption of the user's password by altering the user with below Alter command :
ALTER USER 'username'#'ip_address' IDENTIFIED WITH mysql_native_password BY
'password';
OR
We can avoid this error by make it work with old password plugin:
First change the authentication plugin in my.cnf file for Linux / my.ini file in Windows:
[mysqld]
default_authentication_plugin=mysql_native_password
Restart the mysql server to take the changes in affect and try connecting via MySQL with any mysql client.
If still unable to connect and getting the below error:
Unable to load plugin 'caching_sha2_password'
It means your user needs the above plugin. So try creating new user with create user or grant command after changing default plugin. then new user need the native plugin and you will able to connect MySQL.
Thanks
Currently (on 2018/04/23), you need to download a development release. The GA ones do not work.
I was not able to connect with the latest GA version (6.3.10).
It worked with mysql-workbench-community-8.0.11-rc-winx64.msi (from https://dev.mysql.com/downloads/workbench/, tab Development Releases).
Ok, wasted a lot of time on this so here is a summary as of 19 March 2019
If you are specifically trying to use a Docker image with MySql 8+, and then use SequelPro to access your database(s) running on that docker container, you are out of luck.
See the sequelpro issue 2699
My setup is sequelpro 1.1.2 using docker desktop 2.0.3.0 (mac - mojave), and tried using mysql:latest (v8.0.15).
As others have reported, using mysql 5.7 works with nothing required:
docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:5.7
Of course, it is possible to use MySql 8+ on docker, and in that situation (if needed), other answers provided here for caching_sha2_password type issues do work. But sequelpro is a NO GO with MySql 8+
Finally, I abandoned sequelpro (a trusted friend from back in 2013-2014) and instead installed DBeaver. Everything worked out of the box. For docker, I used:
docker run -p 3306:3306 --name mysql1 -e MYSQL_ROOT_PASSWORD=secret -d mysql:latest --default-authentication-plugin=mysql_native_password
You can quickly peek at the mysql databases using:
docker exec -it mysql1 bash
mysql -u root -p
show databases;
I was installing MySQL on my Windows 10 PC using "MySQL Web Installer" and was facing the same issue while trying to connect using MySQL workbench. I fixed the issue by reconfiguring the server form the Installer window.
Clicking on the "Reconfigure" option it will allow to reconfigure the server. Click on "Next" until you reach "Authentication Method".
Once on this tab, use the second option "Use Legacy Authentication Method (Retain MySQL 5.x Compatibility)".
Keep everything else as is and that is how I solved my issue.
Note: For Linux (Debian, Ubuntu, Mint)
I got this error:
MySQL Error Message: Plugin caching_sha2_password could not be loaded: /usr/lib/x86_64-linux-gnu/mariadb19/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory
I solved it with these steps:
Enter on mysql console: $ mysql -u root -p, if you don't have a password for root user, then:
Use mysql db: mysql> use mysql;
Alter your user for solve the problem: mysql> ALTER USER 'root'#'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
Exit... mysql> quit;
Done!
like this?
docker run -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=yes -d mysql --default-authentication-plugin=mysql_native_password
mysql -uroot --protocol tcp
Try in PWD
https://github.com/GitHub30/docs/blob/change-default_authentication_plugin/mysql/stack.yml
or You shoud use MySQL Workbench 8.0.11.
Open MySQL Command Line Client
Create a new user with a new pass
Considering an example of a path to a bin folder on top, here's the code you need to run in the command prompt, line by line:
cd C:\Program Files\MySQL\MySQL Server 5.7\bin
MySQL -u root -p
current password...***
CREATE USER 'nativeuser'#'localhost'
IDENTIFIED WITH mysql_native_password BY 'new_password';
Then, you can access Workbench again (you should be able to do that after creating a new localhost connection and using the new credentials to start using the program).
Set up a new local host connection with the user name mentioned above (native user), login using the password (new_password)
Courtesy: UDEMY FAQs answered by Career365 Team
For Windows 10,
Modify my.ini file in C:\ProgramData\MySQL\MySQL Server 8.0\
[mysqld]
default_authentication_plugin=mysql_native_password
Restart the MySQL Service.
Login to MySQL on the command line, and execute the following commands in MySQL:
Create a new user.
CREATE USER 'user'#'localhost' IDENTIFIED BY 'password';
Grant all privileges.
GRANT ALL PRIVILEGES ON * .* TO 'user'#'localhost';
Open MySQL workbench, and open a new connection using the new user credentials.
I was facing the same issue and this worked.
Although this shouldn't be a real
solution, it does work locally if you are stuck
ALTER USER 'root'#'localhost' IDENTIFIED WITH mysql_native_password BY '';
This is my databdase definition in my docker-compose:
dataBase:
image: mysql:8.0
volumes:
- db_data:/var/lib/mysql
networks:
z-net:
ipv4_address: 172.26.0.2
restart: always
entrypoint: ['docker-entrypoint.sh', '--default-authentication-plugin=mysql_native_password']
environment:
MYSQL_ROOT_PASSWORD: supersecret
MYSQL_DATABASE: zdb
MYSQL_USER: zuser
MYSQL_PASSWORD: zpass
ports:
- "3333:3306"
The relevant line there is entrypoint.
After build and up it, you can test it with:
$ mysql -u zuser -pzpass --host=172.26.0.2 zdb -e "select 1;"
Warning: Using a password on the command line interface can be insecure.
+---+
| 1 |
+---+
| 1 |
+---+
For those using Docker or Docker Compose, I experienced this error because I didn't set my MySQL image version. Docker will automatically attempt to get the latest version which is 8.
I set MySQL to 5.7 and rebuilt the image and it worked as normal:
version: '2'
services:
db:
image: mysql:5.7
I found that
ALTER USER 'username'#'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
didn't work by itself. I also needed to set
[mysqld]
default_authentication_plugin=mysql_native_password
in /etc/mysql/mysql.conf.d/mysqld.cnf
on Ubuntu 18.04 running PHP 7.0
Here is the solution which worked for me after MySQL 8.0 Installation on Windows 10.
Suppose MySQL username is root and password is admin
Open command prompt and enter the following commands:
cd C:\Program Files\MySQL\MySQL Server 8.0\bin
mysql_upgrade -uroot -padmin
mysql -uroot -padmin
ALTER USER 'root'#'localhost' IDENTIFIED WITH mysql_native_password BY
'admin'
If you are getting this error on GitLab CI like me:
Just change from latest to 5.7 version ;)
# .gitlab-ci.yml
rspec:
services:
# - mysql:latest (I'm using latest version and it causes error)
- mysql:5.7 #(then I've changed to this specific version and fix!)
Open my sql command promt:
then enter mysql password
finally use:
ALTER USER 'username'#'ip_address' IDENTIFIED WITH mysql_native_password BY 'password';
refer:https://stackoverflow.com/a/49228443/6097074
Thanks.
For me this started happening because on a project, I was using Docker image mysql:latest (which was version 5, and which was working fine), and during a later build, the latest version was switched to version 8, and stopped working. I changed my image to mysql:5 and I was no longer getting this error.
This error comes up when the tool being used is not compatible with MySQL8, try updating to the latest version of MySQL Workbench for MySQL8
If you still want to use the new authentication method, the proper solution is to install the mariadb-connector-c package. For Alpine, run:
apk add mariadb-connector-c
This will add the missing caching_sha2_password.so library into /usr/lib/mariadb/plugin/caching_sha2_password.so.
Almost like answers above but may be in simple queries, I was getting this error in my spring boot application along with hibernate after MySQL upgrade. We created a new user by running the queries below against our DB. I believe this is a temp work around to use sha256_password instead of latest and good authentication caching_sha2_password.
CREATE USER 'username'#'localhost' IDENTIFIED WITH mysql_native_password BY 'pa$$word';
GRANT ALL PRIVILEGES ON * .* TO 'username'#'localhost';
MySQLWorkbench 8.0.11 for macOS addresses this.
I can establish connection with root password protected mysql instance running in docker.
If you are trying to connect to a MySQL server from a text-based MySQL client from another computer (be it Docker or not)
Most answers here involve connecting from a desktop client, or ask you to switch to an older authentication method. If you're connecting it with the MySQL client (text-based), I made it work with a Debian Buster in a Docker container.
Say you have the apt system and wget set up, do the following:
sudo apt-get update
sudo apt-get install lsb-release -y
Download a Debian package which update apt sources for you from the MySQL web site.
sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb and select the options you want. In my case I only need MySQL Tools & Connectors to be enabled.
sudo apt-get update
sudo apt-get install mysql-client -y
Done. You can now run the new MySQL client and connect with the new authentication method.
The below solution worked for me
Go to Mysql Workbench -> Server-> Users and Privileges
1.Click Add Account
2.Under Login Tab provide new details and make sure to choose the Authentication Type as standard and choose respective administrative roles and Schema Privileges
Actually MySql allows two type of authentication at the time of installation.
Password Encryption
Legacy Encryption
Read Here
So by checking legacy authentication the issue was resolved.
Try using legacy password while downloading and installing MySql, that helped me.
Or follow the method posted by Santhosh Shivan for Mac OS.
Just downloaded the latest mysqlworkbench which is compatible with the latest encryption:
https://downloads.mysql.com/archives/workbench/
Note: On Mac big Sur, the latest two versions: 8.0.22 and 8.0.23 are buggy and do not work.
Use 8.0.21 until these are fixed
I run docker in M1 (arm64), the direct way of changing in the docker bash does not work for me. Instead, I change the mysql image to be
mysql:8.0.26
and the platform is set as
linux/x86_64
and add default_authentication_plugin=mysql_native_password to my.cnf
Then, you rebuild your container.

Running mysqlclient on python with django

https://www.pythoncentral.io/writing-your-first-python-django-application/
I am following this tutorial on Django for Python. I have reached and installed the mysql-python (mysqlclient in python 3 which I am using) step. However I do not understand what he means by "..execute the following statements in a mysql shell.."
mysql> CREATE USER 'pythoncentral'#'localhost' IDENTIFIED BY '12345';
mysql> CREATE DATABASE myblog;
mysql> GRANT ALL ON myblog.* TO 'pythoncentral'#'localhost';
My problem is I do not know what program I need to enter these commands into.
I have tried imputing the commands in:
cmd.exe at the location of my django folder (myblog)
on the mysql shell (https://dev.mysql.com/downloads/shell/)
In the command window "python -m pip list" shows me mysqlclient is installed, however, python -m mysql (or mysqlclient, mysqldb etc) returns "No module named mysql"
In the mysql shell, I have not been able to run the above commands either but I am less familiar with it compared to the command window.
Any suggestions?
Find out where mysql is installed then move to that folder and run these commands to open the shell
In my case it is
C:\>cd \MYSQL\Bin
C:\MYSQL\Bin>mysql -u root -p admin
'root' is mysql username and 'admin' is my password replace it with you own and you would be able to login and execute those commands.

CKAN DataStore - permission denied for _table_metadata

I I have installed and configured DataStore extension in CKAN following the guided instructions but I am getting the following error:
ProgrammingError: (ProgrammingError) permission denied for relation _table_metadata 'SELECT 1 FROM "_table_metadata" WHERE name = %s AND alias_of IS NULL'
I am a bit stuck in this moment and I don't know what else I can do for getting work DataStore. I realised that this question refers more or less at the same problem as I have but the solution proposed doesn't work for me.
I have installed the last version of CKAN: "ckan_version": "2.4.1"
I would appreciate any help. Any advice?
Thank you.
I suspect something went wrong in this step:
sudo ckan datastore set-permissions | sudo -u postgres psql --set ON_ERROR_STOP=1
When it works, it should show a few lines on the console just saying "GRANT" and "REVOKE". If however you get full SQL lines of commands then the pipe isn't working and instead you have to open psql:
sudo -u postgres psql --set ON_ERROR_STOP=1
and then paste in all the commands that you saw in the console (you can paste them all in one go).

Creating a PostgreSQL database for use with Django

I am currently working my way through this tutorial on how to make a basic blog using Django, but I wanted to use a PostgreSQL database instead of a sqlite database. Django does not auto-create databases for non sqlite, and I am having trouble creating mine. I thought I had done it properly, but whenever I try to sync my DB, I see a bunch of filepaths and then the error
"django.db.utils.OperationalError: FATAL: role [username] does not exist"
I have tried googling the problem and trying a few of the solutions I found, however none of them seem to be working.
Thanks in advance for any guidance you can provide.
Having encountered this from a beginner perspective in the past, I'll go more in-depth -- first, a note on how to read the Django errors:
django.db.utils.OperationalError
means that there was an error in django’s database utility (the bits that connect up django to different types of DBs like MySQL, Postgres, and SQLite), hence the db.utils part. OperationalErrors are things that are returned from the database itself when you try to run something, which means that the you can isolate Django and focus on the database interaction itself. If Django didn’t exist and you ran the same commands through psql (postgres’ command line utility), you’d still see:
FATAL: role [username] does not exist
Also you generally can tell it’s an error from the database because of the all caps. Relational databases LOVE CAPS LOCK.
As far as solving it, the error is pretty self-descriptive. The thing you need to look at is your settings.py file (as kmmnbvnr pointed out). In your database configuration, you should see a username and password. Postgres is complaining that you are trying to connect to the configured DB with a user that doesn’t exist, so you need to create it. Here are the commands using PSQL instead of the sudo commands kmmbvnr used:
Connect to the database with the command line utility:
$ psql -d postgres
If you created a database that was not the default postgres, use that instead for the database name,
i.e. $ psql -d my_database_name
Edit: On certain OSs you may need to add a -U <database user> if it fills in your OS username and not the default "postgres" username.
i.e. $ psql -d postgres -U postgres (postgres is the default user).
CREATE ROLE testrole WITH LOGIN ENCRYPTED PASSWORD 'password';
ALTER ROLE testrole WITH CREATEDB;
grant all privileges on database postgres to testrole;
Change testrole and password to whatever you’d like, so long as they match the username/password in settings.py. Do note the ' ' around the password, but not around the username. Those are important. Also note that Postgres frowns upon using the builtin ‘postgres’ user for non-administrative tasks for security reasons, so it’s best to create another user to use with Django. Also, the last lines about granting permissions are a bit permissive, but for a local test configuration, it’ll be your easiest bet. Consult the Postgres docs on privileges for production environments / proper security.
Lastly, you can test, independent of django, by consulting the man page on PSQL (man psql on linux / mac) on how to login with a specific user with the command line. I believe the command is:
$ psql -d postgres -U testrole -W
Where the -d is specifying the database (i.e. mydatabase or postgres), the -U is the user to connect with, and the -W means prompt for a password.
Assuming you are on a linux host
sudo su postgres
createuser myuser -P
createdb -O myuser mydb
And ensure that you have in settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydb',
'USER': 'myuser',
'PASSWORD': '_replace_with_user_password_',
'HOST': '',
'PORT': '',
}
}

How To Run Postgres locally

I read the Postgres docs for Flask
and they said that to run Postgres you should have the following code
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = postgresql://localhost/[YOUR_DB_NAME]'
db = SQLAlchemy(app)
How do I know my database name?
I wrote db as the name - but I got an error
sqlalchemy.exc.OperationalError: (OperationalError) FATAL: database "[db]"
does not exist
Running Heroku with Flask if that helps
First step, is to get Flask + Postgresql running locally, and the first step to do that is to install postgresql on your machine. Next, you should install the python drivers for postgresql.
For Windows, you can use the windows installer for postgresql and the windows installer for the python drivers.
Once you have finished the above two steps, you need to create a database.
For Windows, you can use the bundled pgadminIII tool. Here is a video that shows how to do just that.
For example, here is how you create a database called the_database, and create a user called databaseuser with a password P#ssw0rd using the built-in tool psql:
$ psql -d template1 -U postgres
template1=# CREATE USER databaseuser WITH PASSWORD 'P#ssw0rd';
template1=# CREATE DATABASE the_database;
template1=# GRANT ALL PRIVILEGES ON DATABASE the_database to databaseuser;
template1=# \q
Here is how you would configure your application with the above information:
db_conn = 'postgresql+psycopg2://databaseuser:P#ssw0rd#localhost/the_database'
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = db_conn
db = SQLAlchemy(app)
I do not have experience with Heroku, but from your messages I would say you don't have PostgreSQL running and you dont have a database at all. Looks like here they have some info https://postgres.heroku.com/ :)
But in your topic you asking about localhost PostgreSQL... So if you want to run your setup locally, first thing to check is if you have PostgreSQL installed and running. If you do, try to connect to it with pgAdmin or from console and create database. If you can't connect - check config for ports, hosts PostgreSQL is listening.
Anyway those messages I see you posted in question in comments, gives me only the idea that you don't have DB created or even running (or you have wrong config).

Categories

Resources