๐[Django] Django & postgreSQL ์ฐ๋ํ๊ธฐ
๋จผ์ DB๋ฅผ ์์ฑํ์!
> psql postgres
postgres=# create database [database_name];
๊ทธ ๋ค์ DB์ ์ ์ํด์ผ๊ฒ ์ง
postgres=# \connect[database_name];
๊ทธ ๋ค์์ ์๋ก์ด ์ ์ ๋ฅผ ๋ง๋ค๊ณ , ๋ช ๊ฐ์ง ์ค์ ์ ํด์ผํจ
=# create user root with password 'password';
- root: ์ ์ ์ด๋ฆ
- password: ๋น๋ฐ๋ฒํธ โ ๋ฐ์ดํ๋ก ๊ฐ์ธ์ฃผ๊ธฐ
alter role root set client_encoding to 'utf-8'
alter role root set timezone to 'Asia/Seoul';
grant all privileges on database [database_name] to root;
์ฌ๊ธฐ๊น์ง๋ PostgreSQL ์ค์ ์ด์๊ณ !
์ด์ Django ์ธํ ์์!
psycopg2 ์ค์น
> pip install psycopg2
settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'project',
'USER': 'root',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '',
}
}
๋ง์ฝ! AssertionError: database connection isnโt set to UTC ์ด๋ฐ ์๋ฌ๊ฐ ๋จ๋ฉด django์ psycopg2์ ๋ฒ์ ํธํ ๋ฌธ์ ์. psycopg2๋ฅผ ๋ค์ด๊ทธ๋ ์ด๋ ํ๊ฑฐ๋, settings.py์์
USE_TZ = True
๋ฅผ ์ญ์ ํ๋ฉด ๋๋ค.
DB ํ ์ด๋ธ ์ ๋ณด๋ฅผ models.py๋ก ๋ฐ์์ค์!
DB table์ด ์กด์ฌํ๋ค๋ ๊ฐ์ ํ์ ์งํ!
> python manage.py inspectdb > models.py
- ํ ์ด๋ธ ์ ๋ณด๊ฐ models.py์ ์ฎ๊ฒจ ๋ด์์ง๋ค!
# Unable to inspect table โtable_nameโ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด
GRANT SELECT ON TABLE [table_name] TO [user_name];
์ผ๋ก ๊ถํ์ ๋ถ์ฌํ ํ ๋ค์ ํด๋ณด์.
- ๋ชจ๋ ํ ์ด๋ธ์ ๋ํ ๊ถํ ๋ถ์ฌํ๊ธฐ - ์ฃผ์ํ์ฌ ์ฌ์ฉ(๊ถ์ฅํ์ง ์์)
```
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO [์ฌ์ฉ์๋ช
];
```
models.py์ ๋ฐ์ดํฐ๊ฐ ์๊ฒผ์ผ๋, ๋ง์ด๊ทธ๋ ์ด์ ํด์ผ๊ฒ ์ง?
> python manage.py startapp [app_name]
INSTALLED_APP = [
...
'app_name', # ์ฑ ์ถ๊ฐ
...
]
์ฌ๊ธฐ์, ๊ธฐ์กด models.py๋ฅผ ์ฑ ์์ models.py์ ๋ฎ์ด์์์ฃผ์.
> python manage.py makemigrations
> python manage.py migrtate
์ฌ๊ธฐ์ django_migrations table (permission denied for schema public LINE 1: CREATE TABLE โdjango_migrationsโ (โidโ bigint NOT NULL PRIMAโฆ ์ด๋ฐ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์๋ ์๋๋ฐ, psql์์
alter database [database_name] owner to [user_name];
๋ช ๋ น์ด๋ฅผ ์คํํ ํ์ ๋ค์ ํด์ฃผ๋ฉด ๋๋ค. โ ํ๋ก์ ํธ DB์์์ ์
๋ก ๊ถํ์ ์ฃผ๋๊ฑฐ๋ผ๊ณ ํจ.
์ฐธ๊ณ ์๋ฃ
CREATE TABLE โdjango_migrationsโ (โidโ bigint NOT NULL PRIMA
๋๊ธ๋จ๊ธฐ๊ธฐ