django连接已有数据的mysql数据库

Posted 只有时间是永恒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django连接已有数据的mysql数据库相关的知识,希望对你有一定的参考价值。

django连接已有数据的mysql数据库

django==2.1.8

mysql==5.7

案例一:

DATABASES = 
    \'default\': 
        # \'ENGINE\': \'django.db.backends.sqlite3\',
        # \'NAME\': BASE_DIR / \'db.sqlite3\',
        "ENGINE": "django.db.backends.mysql",  # mysql配置
        "OPTIONS": 
            \'charset\': \'utf8mb4\',
            \'init_command\': \'SET sql_mode="STRICT_TRANS_TABLES"\'
        ,
        "HOST": DATABASE_HOST,
        "PORT": DATABASE_PORT,
        "USER": DATABASE_USER,
        "PASSWORD": DATABASE_PASSWORD,
        "NAME": DATABASE_NAME,
    ,
    \'mysql_cexun\':   # 新增的已有数据的数据库
        "ENGINE": "django.db.backends.mysql",  # mysql配置
        "HOST": consts.DATABASE_HOST_CEXUN,
        "PORT": consts.DATABASE_PORT_CEXUN,
        "USER": consts.DATABASE_USER_CEXUN,
        "PASSWORD": consts.DATABASE_PASSWORD_CEXUN,
        "NAME": consts.DATABASE_NAME_CEXUN,
    

保证配置是正确的,数据库访问不报错,进入下一步,生成models模型

python manage.py inspectdb --database  mysql_cexun  # 指定生成数据库所有表的模型
# 或
python manage.py inspectdb --database  mysql_cexun  user # 指定生成数据库user表的模型
# 或
python manage.py inspectdb --database  mysql_cexun  user > models.py # 指定生成user表的模型在models.py文件中

这个时候会出现下面的显示

PS F:\\Project\\Flexible_platform_server> python manage.py inspectdb --database  mysql_cexun table user
# This is an auto-generated Django model module.
# You\'ll have to do the following manually to clean this up:
#   * Rearrange models\' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don\'t rename db_table values or field names.
from django.db import models
# Unable to inspect table \'table\'
# The error was: (1146, "Table \'vtehil.table\' doesn\'t exist")


class User(models.Model):
    id = models.IntegerField(db_column=\'ID\', primary_key=True)  # Field name made lowercase.
    name = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = \'user

这是我们就将模型添加到已有或新的models.py中使用即可,使用注意指定数据库

class User(models.Model):
    id = models.IntegerField(db_column=\'ID\', primary_key=True)  # Field name made lowercase.
    name = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False  # 这里是False,代表不创建新的表,使用已存在的表
        db_table = \'user\'  # 指定已存在的表名

在上述代码中,我们通过继承models.Model来定义一个模型类,并在类中定义各个字段对应数据库表中的列。由于我们要连接的是已经存在的表,因此需要设置managed=False来禁止Django创建新的表,并通过db_table属性指定已存在的表名。

使用的时候注意,在orm语句中要用using()属性指定使用的数据库连接。

usersdept_all = models.VtehilCarTestpower.objects.using("mysql_cexun").last()
        print("UsersDept---", usersdept_all.ftarget_c)

案例二:

不用setting中的配置,自己写MySQL连接的模块去使用。

在Python中,可以使用第三方模块mysql-connector-python来连接MySQL数据库。以下是一个简单的MySQL连接模块示例,具体的实现需要根据具体的应用场景进行完善和扩展。

mysql连接模块案例一:

import mysql.connector

class MySQLConnector:
    def __init__(self, host, port, user, password, database):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.database = database
        self.conn = None

    def connect(self):
        if self.conn is None or not self.conn.is_connected():
            self.conn = mysql.connector.connect(
                host=self.host,
                port=self.port,
                user=self.user,
                password=self.password,
                database=self.database
            )

    def query(self, sql):
        if self.conn is None or not self.conn.is_connected():
            self.connect()
        cursor = self.conn.cursor()
        cursor.execute(sql)
        result = cursor.fetchall()
        cursor.close()
        return result

    def execute(self, sql):
        if self.conn is None or not self.conn.is_connected():
            self.connect()
        cursor = self.conn.cursor()
        cursor.execute(sql)
        self.conn.commit()
        cursor.close()

    def __del__(self):
        if self.conn is not None and self.conn.is_connected():
            self.conn.close()

mysql连接模块案例二:

import mysql.connector

class MySQL:
    def __init__(self, host, port, user, password, database):
        self.conn = mysql.connector.connect(
            host=host,
            port=port,
            user=user,
            password=password,
            database=database,
            auth_plugin=\'mysql_native_password\'  # 可选参数,用于解决5.7版本以上的认证问题
        )
        self.cursor = self.conn.cursor()

    def query(self, sql):
        self.cursor.execute(sql)
        result = self.cursor.fetchall()
        return result

    def execute(self, sql):
        self.cursor.execute(sql)
        self.conn.commit()

    def __del__(self):
        self.cursor.close()
        self.conn.close()

以上代码将MySQL连接封装为一个类MySQLConnector,在类的构造函数中初始化连接所需的主机地址、端口、用户名、密码和要连接的数据库名。类中定义了一个connect()方法,用于在需要时建立连接。query()execute()方法分别用于执行查询和非查询语句。

在类的析构函数中,释放资源。注意,在使用时应该手动调用__del__()方法释放资源,防止资源泄露。

在以后的Python项目中使用该模块时,只需要将该模块导入到项目中,然后实例化MySQLConnector对象并调用其方法即可。例如:

from myapp.mysql_connector import MySQLConnector

connector = MySQLConnector(\'localhost\', 3306, \'user\', \'password\', \'database\')
results = connector.query(\'SELECT * FROM my_table\')
# do something with the query results
connector.execute(\'UPDATE my_table SET field=value WHERE id=1\')
# ...

以上代码演示了在Python程序中如何使用MySQLConnector类的实例对象执行查询和非查询语句。

Django连接数据库及数据操作

在Django中有自带了ORM.首先我们可以通过manage.py命令管理工具来进行创建数据迁移与生成映射数据库关系.本例子使用mysql中的mydb数据库,mysql数据库配置部分前面已有介绍.

1.在使用ORM之前,需要在项目主文件中的__init__.py里,创建数据库连接器.python3.x中使用pymysql:

1 import pymysql
2 
3 pymysql.install_as_MySQLdb()

2.数据库连接器创建好后,在app目录下models.py模型文件中创建模型表:

from django.db import models

# Create your models here.


class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=20)
    age = models.IntegerField()

    def __str__(self):
        return ID%s-用户名:%s-年龄%s%    (self.id,self.name,self.age)

3.创建好模型后,使用manage.py管理工具生成迁移文件与映射到数据库中:

(py3env) [email protected]:~/PythonPorject/hello_django$ python manage.py makemigrations
Migrations for info:
  info/migrations/0001_initial.py
    - Create model User
(py3env) [email protected]:~/PythonPorject/hello_django$ python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, info, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying info.0001_initial... OK
  Applying sessions.0001_initial... OK

4.映射好数据库后,可在mysql中通过show tables;查看表是否创建成功,接进来对数据库进行插入数据.在app下views.py中:

 1 from django.shortcuts import render
 2 
 3 # Create your views here.
 4 from django.http import HttpResponse
 5 from .models import User
 6 
 7 def index(request):
 8     return render(request,info/index.html)
 9 
10 def add_user(request):
11     #方法一
12     # user = User()
13     # user.name = ‘蓝靓钦‘
14     # user.age = 18
15     # user.save()
16     #方法二
17     # user = User(name=‘remoting‘,age=18)
18     # user.save()
19     #方法三
20     # User.objects.create(name=‘lan‘,age=20)
21     #方法四 检查数据库是否已经存在,存在不添加不存在则添加数据
22     User.objects.get_or_create(name=lan,age=20)
23     return HttpResponse(插入数据)
24 
25 
26 def search_user(request):
27     # 查询所有数据
28     rs = User.objects.all()
29     print(rs)
30     #查询一条对象
31     rs = User.objects.get(id=2)
32     print(rs)
33     #查询满足条件的对象
34     rs = User.objects.filter(name=蓝靓钦)
35     print(rs)
36     return HttpResponse(查询数据)

 

5.配置urls.py进行分配路由调试:

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r^index/$,views.index),
    url(r^add/$,views.add_user),
    url(r^search/$,views.search_user),
]

 

以上是关于django连接已有数据的mysql数据库的主要内容,如果未能解决你的问题,请参考以下文章

Django连接数据库及数据操作

django连接pg数据库报错theconnectiondo

Django---Django连接Mysql数据库

Django系列---使用MySql数据库

Django连接数据mysql

pycharm下的django怎么连接mysql数据库啊?