Docker 部署 Django-Mysql常见错误

1
2
3
4
5
6
 apt-get install python3-dev nginx
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi

apt-get install mysql-server mysql-client # 连接数据库需要的环境
apt-get install libmysqlclient-dev
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple mysqlclient
1
2
3
4
5
6
7
8
9
10
11
12
docker: Error response from daemon: driver failed programming external connectivity on endpoint testcontainer (c55fc0dd481c36765fcd968118c3fbf5c7fa686cdfc625c485f963109b0f89e3):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 5000 -j DNAT --to-destination 172.17.0.2:80 ! -i docker0: iptables: No chain/target/match by that name.
(exit status 1))

# Enter below command, it will clear all chains.
$ sudo iptables -t filter -F
$ iptables -t filter -X
# Then restart Docker Service using below comamnd
$ systemctl restart docker

ModuleNotFoundError: No module named 'statsmodels'

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple statsmodels

django 连接已有的MySQL数据库 操作方式

方法一:采用django自由的语法进行操作

参考:https://docs.djangoproject.com/zh-hans/3.0/howto/legacy-databases/

1
2
3
4
5
6
7
8
9
10
11
12
python manage.py inspectdb # 将mysql的数据库创建对应的模型
python manage.py inspectdb > models.py # 将结果保存成文件
python manage.py database table_name > models.py # 只输出特定数据库下某张表对应的模型
## 例如:
class Person(models.Model):
id = models.IntegerField(primary_key=True)
first_name = models.CharField(max_length=70)
class Meta:
managed = False # 默认不能进行创建、修改和删除 ,此处修改为True
db_table = 'CENSUS_PERSONS'

python manage.py migrate

方法一会存在以下几个问题:(django=2.2,本地windows环境)

  • 生成model.py文件时,应当在app目录下生成,否则会报错,得不到相应的模型
  • 生成的model.py文件,是utf-16进制(或其他格式),需要转换为utf-8进制,否则无法识别文件,pycharm右下角可以看到文件进制并修改
  • 数据库的表存在依赖关系,别名重复等情况。在指定特定表生成模型,注意也要将其他表也生成下来,同时别名重复需要加related_name,可以仔细阅读报错信息进行相应操作
  • 多个数据库之前不容易操作,需要配置多数据库
  • 多数据库识别,虽然setting配置了多数据库,但是还是要进行路由操作才能识别,否则只能识别default数据库

方法二: 第三方库

pymysql,优点:

  • 免去多数据库的路由配置
  • 直接用mysql语句