在Django中,你可以编写测试来查询另一个数据库服务器中的数据,并将结果导入当前Django项目的数据库表中。下面是一个简单的示例:

假设你有一个Django应用程序,名为myapp,并且你希望从另一个数据库服务器中的某个表中获取数据,并将其导入myapp应用程序的某个模型中。

首先,确保你的settings.py中配置了要连接的数据库。你可以在DATABASES设置中定义多个数据库连接。

# settings.py

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
},
'other_db': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'other_db_name',
'USER': 'username',
'PASSWORD': 'password',
'HOST': 'other_db_host',
'PORT': 'other_db_port',
},
}

接下来,在你的tests.py中编写测试代码:

# tests.py

from django.test import TestCase
from myapp.models import MyModel # 导入你的模型
from other_app.models import OtherModel # 导入另一个应用程序的模型
from django.db import connections class MyTest(TestCase):
def test_import_data(self):
# 获取其他数据库连接
other_db_conn = connections['other_db'] # 在其他数据库中查询数据
other_data = OtherModel.objects.using('other_db').all() # 将查询到的数据导入当前数据库
for item in other_data:
my_model_instance = MyModel(
field1=item.field1, # 适当地修改这些字段名以匹配你的模型
field2=item.field2,
# 依此类推
)
my_model_instance.save() # 检查数据是否成功导入
self.assertEqual(MyModel.objects.count(), len(other_data))

在这个例子中,我们假设OtherModel是另一个应用程序中的模型,它与你的MyModel不同。你可以根据需要调整字段名和模型结构。在测试方法中,我们使用了using('other_db')来指定使用其他数据库连接执行查询。

确保在运行测试之前,你已经在其他数据库中填充了数据,并且在当前数据库中MyModel表为空。你可以使用python manage.py test来运行测试。

 
 
 
 mysql案例

# settings.py

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'localhost', # 当前数据库服务器地址
'PORT': '3306', # MySQL 默认端口
},
'other_db': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'other_database_name',
'USER': 'other_database_user',
'PASSWORD': 'other_database_password',
'HOST': 'other_server_host', # 其他数据库服务器地址
'PORT': '3306', # MySQL 默认端口
},
}

sql server案例

如果其他数据库是 SQL Server 2019,你需要在 Django 中使用适当的数据库引擎以及正确的连接信息来配置数据库连接。首先,确保你的 Django 项目已经安装了 django-pyodbc-azure 库,这是用于连接 Microsoft SQL Server 数据库的 Django 后端。然后,按照以下步骤操作:

  1. settings.py 中配置数据库连接,确保你指定了正确的 SQL Server 连接信息
# settings.py

DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'your_database_name',
'USER': 'your_database_user',
'PASSWORD': 'your_database_password',
'HOST': 'your_server_host', # SQL Server 服务器地址
'PORT': '', # 通常为空
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server', # 或者根据你的驱动版本指定
},
},
'other_db': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'other_database_name',
'USER': 'other_database_user',
'PASSWORD': 'other_database_password',
'HOST': 'other_server_host', # 其他 SQL Server 服务器地址
'PORT': '', # 通常为空
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server', # 或者根据你的驱动版本指定
},
},
}

确保 sql_server.pyodbc 是正确的引擎,并且使用了正确的 ODBC 驱动程序。OPTIONS 中的 'driver' 值应该是你在本地安装的 ODBC 驱动程序的名称。

在测试代码中,使用 using() 方法来指定要使用的数据库连接,就像之前一样

# tests.py

from django.test import TestCase
from myapp.models import MyModel # 导入你的模型
from other_app.models import OtherModel # 导入另一个应用程序的模型 class MyTest(TestCase):
def test_import_data(self):
# 在其他 SQL Server 数据库服务器上查询数据
other_data = OtherModel.objects.using('other_db').all() # 使用名为 'other_db' 的数据库连接 # 将查询到的数据导入当前数据库
for item in other_data:
my_model_instance = MyModel.objects.create(
field1=item.field1, # 适当地修改这些字段名以匹配你的模型
field2=item.field2,
# 依此类推
) # 检查数据是否成功导入
self.assertEqual(MyModel.objects.count(), len(other_data))

你想要从 SQL Server 2019 数据库中获取数据并将其导入到当前 Django 项目使用的 MySQL 数据库中。这种情况下,你需要使用两个不同的数据库连接。你可以使用 Django 的数据库路由来分别连接两个数据库并处理数据的导入。

首先,确保你的 Django 项目已经配置了两个数据库连接,一个是 MySQL,另一个是 SQL Server 2019。配置时,分别提供正确的连接信息。

# settings.py

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'your_mysql_database_name',
'USER': 'your_mysql_database_user',
'PASSWORD': 'your_mysql_database_password',
'HOST': 'localhost', # MySQL 服务器地址
'PORT': '3306', # MySQL 默认端口
},
'sql_server': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'your_sql_server_database_name',
'USER': 'your_sql_server_database_user',
'PASSWORD': 'your_sql_server_database_password',
'HOST': 'sql_server_host', # SQL Server 服务器地址
'PORT': '', # SQL Server 默认端口
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server', # SQL Server 驱动程序
},
},
}

然后,在 Django 中创建一个数据库路由以告诉 Django 如何路由对不同模型的数据库操作。在 routers.py 文件中添加以下内容:

# routers.py

class MyRouter:
def db_for_read(self, model, **hints):
"""
Reads from 'sql_server' database.
"""
if model._meta.app_label == 'other_app':
return 'sql_server'
return 'default' def db_for_write(self, model, **hints):
"""
Writes always go to the 'default' database.
"""
return 'default' def allow_relation(self, obj1, obj2, **hints):
"""
Allow relations if both objects are in the 'default' database.
"""
db_list = ('default', 'sql_server')
if obj1._state.db in db_list and obj2._state.db in db_list:
return True
return None def allow_migrate(self, db, app_label, model_name=None, **hints):
"""
Make sure the 'other_app' app only appears in the 'sql_server'
database.
"""
if app_label == 'other_app':
return db == 'sql_server'
return db == 'default'

settings.py 中注册这个路由:

# settings.py

DATABASE_ROUTERS = ['your_project_name.routers.MyRouter']

最后,在你的测试代码中,使用 using() 方法来指定要从 SQL Server 数据库中获取数据。假设 OtherModel 是 SQL Server 数据库中的模型,MyModel 是 MySQL 数据库中的模型。

# tests.py

from django.test import TestCase
from myapp.models import MyModel # 导入你的模型
from other_app.models import OtherModel # 导入另一个应用程序的模型 class MyTest(TestCase):
def test_import_data(self):
# 在 SQL Server 数据库中查询数据
other_data = OtherModel.objects.using('sql_server').all() # 使用名为 'sql_server' 的数据库连接 # 将查询到的数据导入当前 MySQL 数据库
for item in other_data:
my_model_instance = MyModel.objects.create(
field1=item.field1, # 适当地修改这些字段名以匹配你的模型
field2=item.field2,
# 依此类推
) # 检查数据是否成功导入
self.assertEqual(MyModel.objects.count(), len(other_data))

这样,你的测试就能够从 SQL Server 数据库中获取数据并将其导入到当前 Django 项目使用的 MySQL 数据库中。

 
 
 
 

在Django中,多数据操作,你可以编写测试来查询另一个数据库服务器中的数据,并将结果导入当前Django项目的数据库表中的更多相关文章

  1. 【数据传输 2】批量导入的前奏:将Excel表中的数据转换为DataTable类型

    导读:我们知道,在数据库中,数据集DataSet是由多张DataTable表组成.所以,如果我们需要将数据从外部导入到数据库中,那么要做的很重要的一步是将这些数据转换为数据库可以接受的结构.今天在用S ...

  2. Mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表(在同一语句中)。

    将select出的结果再通过中间表select一遍,这样就规避了错误.注意,这个问题只出现于mysql,mssql和oracle不会出现此问题. mysql中You can't specify tar ...

  3. 数据库中增加操作insert into的用法和查询select的用法

    insert into的用法 1.一条insert into 可以插入多条记录 2.insert into 能判断主键是否冲突,和做出冲突处理 如果主键冲突的话会报错,还能写成如果冲突就更新的形式格式 ...

  4. HBase的java操作,最新API。(查询指定行、列、插入数据等)

    关于HBase环境搭建和HBase的原理架构,请见笔者相关博客. 1.HBase对java有着较优秀的支持,本文将介绍如何使用java操作Hbase. 首先是pom依赖: <dependency ...

  5. SQL server学习(二)表结构操作、SQL函数、高级查询

    数据库查询的基本格式为: select ----输出(显示)你要查询出来的值 from -----查询的依据 where -----筛选条件(对依据(数据库中存在的表)) group by ----- ...

  6. 浅谈hbase表中数据导出导入(也就是备份)

    转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=23916356&id=3321832 最近因为生产环境hbase ...

  7. Django 2.0.1 官方文档翻译: 编写你的第一个 Django app,第五部分(Page 10)

    编写你的第一个 Django app,第五部分(Page 10)转载请注明链接地址 我们继续建设我们的 Web-poll 应用,本节我们会为它创建一些自动测试. 介绍自动测试 什么是自动测试 测试是简 ...

  8. Django学习笔记之Django ORM相关操作

    一般操作 详细请参考官方文档 必知必会13条 <> all(): 查询所有结果 <> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <> ...

  9. Django ORM哪些操作

    一般操作 看专业的官网文档,做专业的程序员! 必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 ...

  10. django 通过orm操作数据库

    Django Model 每一个Django Model都继承自django.db.models.Model 在Model当中每一个属性attribute都代表一个database field 通过D ...

随机推荐

  1. PasteSpider之接口的授权实现为什么不采用JWT方式

    PasteTemplate序列的接口权限控制使用的都是一套逻辑 包括不限于PasteSpider,PasteTimer,PasteTicker等 大致逻辑一致,具体的细节可能会根据项目做一些调整! 实 ...

  2. Ciphey在windows下的安装问题('gbk' codec can't decode byte 0xbf in position 695)

    ---- 这玩意儿安装查了别人的博客,没搞明白他们怎么安装的- -,我太菜了,看不懂.还是去github搜了下,才解决. ---- 首先是ciphey这个包的安装(一定要的):python3 -m p ...

  3. ENVI自动地理配准:GCP地面控制点的自动产生

      本文介绍基于ENVI软件,利用"Image Registration Workflow"工具实现栅格遥感影像自动寻找地面控制点从而实现地理配准的方法.   在ENVI手动地理配 ...

  4. Supervisor 守护进程管理工具

    引言 Supervisor 是基于 Python 编程语言开发的一套通用的进程管理程序,它是通过 fork/exec 的方式把需要管理的进程作为子进程来管理. 安装 pip3 安装 superviso ...

  5. golang 怎样防止结构体对象被拷贝

    主要实现Lock以及Unlock就可以了 此时使用go vet mian.go 检查就会提示我们./main1.go:25:7: assignment copies lock value to b: ...

  6. nginx接受请求连接事件模块流程

    操作系统内核: 三次握手,当用户发来一个 SYN 报文时,系统内核会返回一个SYN+ACK确认给客户端,当客户端再次发送ACK来的时候,此时就已经建立了三次握手. 完成三次握手后,操作系统会根据系统内 ...

  7. 8.18考试总结(NOIP模拟43)[第一题·第二题·第三题·第四题]

    愿你和重要的人,在来日重逢. 前言 题目名字起的很随意... 这天 Luogu 的运势好像是大凶(忌:打模拟赛,注意报零). 但是考得还不错,拿到了这么多场模拟赛以来第二三个场上AC. 所以说,我爱大 ...

  8. itestwork(爱测试) 开源一站式接口测试&敏捷测试工作站 9.0.2Rc2发布

    (一)itest 简介 itest work (爱测试)  一站式工作站让测试变得简单.敏捷,"好用.好看,好敏捷" ,是itest wrok 追求的目标.itest work 包 ...

  9. 改变函数中的this指向

      // 改变函数的this指向         // 先记住一句话 : 箭头函数不能改变this指向         // 语法1: call() 方法         //        在调用函 ...

  10. jquery的全局函数 多库并存

            // jQuery的全局函数 , 也称钩子函数         // 所谓的钩子函数 是 与 其他函数绑定的函数         // 作用是 监听 函数的执行 当函数执行到某个状态时 ...