『Django』模型入门教程-操作MySQL


theme: smartblue

点赞 + 关注 + 收藏 = 学会了

00.png

本文简介

一个后台如果没有数据库可以说废了一半。日常开发中大多数时候都在与数据库打交道。Django 为我们提供了一种更简单的操作数据库的方式。

Django 中,模型(Model)是用来定义数据库结构的类。每个模型类通常对应数据库中的一个表,类的属性对应表中的列。通过定义模型,DjangoORM(Object-Relational Mapping)可以将 Python 对象映射到数据库表,并提供一套 API 来进行数据库操作。

本文介绍模型的用法。

ORM

在了解模型之前先了解一下什么是 ORM

ORM(Object-Relational Mapping,对象关系映射)是 Django 框架中用于与数据库进行交互的一种工具。ORM 允许开发者使用 Python 对象和类来操作数据库表,而无需直接编写 SQL 查询。这样,开发者可以以更加直观和面向对象的方式处理数据库操作。

简单来说,ORM 就是让我们使用编程语言而不是 SQL 语句去与数据库进行交互。

数据库和面向对象的对应关系:

  • 数据表 - 类
  • 数据行 - 对象
  • 字段 - 属性

配置MySQL数据库

Django 中默认使用的数据库是 SQLite,而在我们这边很多中小企业喜欢用 MySQL,所以使用 Django 操作 MySQL 前需要先配置一下。

在配置之前,需要先安装好 MySQL ,下载地址:https://dev.mysql.com/downloads/mysql/

安装好 MySQL 后,在 Django 项目中打开 settings.py 文件,DATABASES 这段默认的配置是这样的:

python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os.path.join(BASE_DIR, 'db.sqlite3') } }

我们要用 MySQL ,就要改成这样:

python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_demo' } }

这里的 NAME 指的是数据库的名称,需要在 MySQL 里创建一个 django_demo 的数据库。

打开终端,连接 MySQL ,然后创建 django_demo 数据库。

```bash

连接 MySQL 数据库

mysql -u root -p

然后输入密码

创建数据库

create database django_demo; ```

然后继续设置 settings.py 文件的 DATABASES 这段配置。

python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_demo', 'HOST': '127.0.0.1', 'USER': 'root', 'PASSWORD': '12345678' } }

逐个字段解释一下:

  • ENGINE:这个字段指定Django要使用的数据库引擎常用的引擎包括:
    • 'django.db.backends.postgresql'(PostgreSQL)
    • 'django.db.backends.mysql'(MySQL)
    • 'django.db.backends.sqlite3'(SQLite)
    • 'django.db.backends.oracle'(Oracle)
  • NAME:指定要连接的数据库的名称。
  • HOST:数据库服务器的地址。127.0.0.1表示本地服务器,如果数据库在远程服务器上运行,则需要指定远程服务器的IP地址或域名。
  • USER:连接到数据库的用户名。
  • PASSWORD:用户名对应的密码。

我在自己电脑的用户名和密码都设置得比较简单,在生产环境千万别设置这么简单的账号密码。

安装 PyMySQL

Django 中,默认使用的 MySQL 数据库连接库是 MySQLdb 。不过,由于MySQLdb 在某些情况下的兼容性问题和安装难度,有时会选择使用 PyMySQL 作为替代。

但使用 PyMySQL,需要做一些额外的配置。

首先,安装PyMySQL

pip install pymysql

然后在 Django 项目的 __init__.py 文件(通常在与settings.py文件同级的目录下)中添加以下代码,以确保 Django 使用 PyMySQL 来代替 MySQLdb

```python import pymysql

pymysql.installasMySQLdb() ```

数据迁移

执行数据库迁移是 Django 开发流程中的一个重要步骤。迁移用于同步数据库模式和 Django 模型的定义。之后对数据库做完的所有操作,最后都要执行“生成迁移文件”和“迁移数据库”这两项操作。

执行数据库迁移的步骤

1. 生成迁移文件

生成迁移文件是将模型的更改(创建、修改、删除模型和字段)记录下来,生成迁移文件的命令是:

python manage.py makemigrations

这个命令会扫描你定义的模型(位于 Django 应用的 models.py 文件中),并生成描述这些更改的迁移文件。这些迁移文件通常存储在每个应用的 migrations 目录下。

2. 迁移数据库

将迁移文件应用到数据库中,使数据库的结构与模型定义一致,命令是:

python manage.py migrate

这个命令会执行所有未应用的迁移文件,更新数据库模式。

在没有定义自己的模型之前,也能执行数据库迁移,这是因为 Django自带了一些默认的应用程序(如认证系统、会话管理、站点管理等),这些应用程序依赖于一些数据库表。这些表的迁移文件已经包含在 Django框架中,当执行迁移时,Django会为这些默认应用程序创建必要的数据库表。

创建模型

在创建模型之前我们需要知道这个模型属于哪一个应用下的。

我们前面已经创建了一个 blog 应用了,这个应用的作用是对博客进行操作。

而每一篇博客应该都有一个作者,所以我们再创建多一个用户相关的应用,叫 account

python manage.py startapp account

创建完这个应用记得在项目的 settings.py 里注册这个应用。

创建和注册应用的方法在《『Django』创建app(应用程序)》 里有提到。

此时我们就有2个应用了。

01.png

在这两个应用中都各自有 models.py 文件,这是我们要操作的目标文件。

创建用户相关的模型

先打开 account/models.py 这个文件,创建用户相关的数据表。

```python

blog/models.py

from django.db import models

创建一个用户表

class User(models.Model): id = models.AutoField(primarykey=True) # 用户名 username = models.CharField('用户名', maxlength=30, null=True, blank=True, unique=True) # 密码 password = models.CharField('密码', max_length=30) # 邮箱 email = models.EmailField('邮箱', unique=True, null=True, blank=True) ```

这里的代码很简单,简单来说就是通过 class 创建一个 User 类,这个类的参数是 models.Model ,这个是固定写法。

然后分别创建4个字段,逐一介绍一下:

  • id
    • models.AutoField:自增字段
    • primary_key=True:主键
  • username:用户名
    • models.CharField:字符字段
    • max_length=30:最大长度30
    • null=True:允许为 nullnull 的值默认是 False。这里主要影响 MySQL 入库时的值。
    • blank=True: 允许为 null。默认 False。决定这个字段是否为空,比如登录时这里用户名是否为空。如果 True 的话可以设置为空。这里主要影响程序逻辑。
    • unique=True: 该字段在整个表中必须是唯一的。,默认False。
  • password:密码
  • email:邮箱

密码和邮箱的配置在前面的字段中解释过了,这里不再啰嗦。

创建博客模型

接下来就要配置 blogmodels.py 了。

```python

blog/models.py

from django.db import models from account.models import User

class Article(models.Model): id = models.IntegerField(primarykey=True) # 标题 title = models.CharField(maxlength=120) # 内容 content = models.TextField() # 发布时间 publishdate = models.DateTimeField() # 关联用户 user = models.ForeignKey(User, ondelete=models.CASCADE) ```

这里引入了 account.models 用户应用的 models

blog/models.py 中部分字段的配置和 account/models.py 是差不多的,其中有区别的是:

  • id
    • models.IntegerField:用于存储整数。
  • content:内容
    • models.TextField:用于存储长文本,不需要指定 max_length
  • publish_date:发布时间
    • models.DateTimeField:用于存储日期和时间。
  • user:关联用户
    • models.ForeignKey:要关联的外键,用于定义多对一关系。这里传入的第一个参数是要关联的外键的模型;第二个 on_delete=models.CASCADE 表示关联删除,当用户被删除时,对应的文章也会一起被删除。

执行迁移

models.py 里创建好数据表的代码后,生成迁移文件,执行迁移操作。就能在 MySQL 中看到这些表了。

创建迁移文件,再执行迁移命令:

python manage.py makemigrations
python manage.py migrate

02.png

看到以上信息证明操作执行成功。因为我是在Mac上操作,我电脑有python2和python3两个环境,所以我需要使用 python3 xxxx 这种方式去执行。

接下来在数据库中看看这两个表。

03.png

设置 meta 元数据

有没有发现,前面创建的 userarticle 两个表都有一个应用名的前缀和下划线。

这是 Django 默认的行为,如果你不想要这个应用名,可以在建表的时候设置 meta

account/models.py 中的代码就变成这样写:

```python

account/models.py

from django.db import models

创建一个用户表

class User(models.Model): id = models.AutoField(primarykey=True) # 用户名 username = models.CharField('用户名', maxlength=30, null=True, blank=True, unique=True) # 密码 password = models.CharField('密码', max_length=30) # 邮箱 email = models.EmailField('邮箱', unique=True, null=True, blank=True)

class Meta:# 自定义表名db_table = 'user'# 表别名verbose_name = '用户表'

```

blog/models.py 中的代码就变成这样写:

```python

blog/models.py

from django.db import models from account.models import User

class Article(models.Model): id = models.IntegerField(primarykey=True) title = models.CharField(maxlength=120) content = models.TextField() # 发布时间 publishdate = models.DateTimeField() # 关联用户 # ondelete=models.CASCADE: 表示关联删除,当用户被删除时,对应的文章也会一起被删除。 user = models.ForeignKey(User, on_delete=models.CASCADE)

class Meta:# 自定义表名db_table = 'article'# 表别名verbose_name = '文章信息表'

```

在创建表的类里面再添加一个 Meta类,设置完元信息后再执行生成迁移文件和执行迁移的命令即可。

python manage.py makemigrations
python manage.py migrate

04.png

此时再查看 django_demo 这个库就能看到 articleuser 两个表了。

ORM 增删改查(CRUD)

终于到了本文最后一部分内容了。

在创建完表后,接下来就要对数据进行**“增删改查”**操作了。也就是大家常说的“CRUD”。

  • C(create):增加、插入数据
  • R(read):读取数据
  • U(update):更新、修改数据
  • D(delete):删除数据

因为现在还没有具体的界面,所以我先使用 shell 操作。

打开终端,进入项目目录,然后输入下面这条命令就可以使用 shell 操作。

bash python manage.py shell

新增数据

首先要有数据。新增数据的方法有几个:

  • save() :保存
  • create() :新增数据
  • bulk_create() :批量新增数据

save()

先试试 save() 方法。

```python from account.models import User

userobjzhangsan = User(username='zhangsan', password='123456', email='zhangsan@qq.com')

userobjzhangsan.save() ```

上面这段代码的意思是在 User 这个表里插入一条数据。

要操作 User 表,首先要导入 User 模型,就是用到 from account.models import User 这句代码。

然后创建一个 user_obj_zhangsan 对象,调用 User 模型,分别传入用户名 username 、密码 password 和 邮箱 email

最后调用 save() 方法。

此时打开数据库的 User 表查就能查到刚刚保存的这条数据。

用到的查询命令是 select * from user;

05.png

create()

接下来试试 create() 方法。

前面用 save() 方法首先创建一个对象,然后再调用 save() 保存紧数据库。而 create() 方法可以简单理解成将 save() 所需要的两步操作合成一步。

```python from account.models import User

userobjlisi = User.objects.create(username='lisi', password='12345666666', email='lisi@qq.com') ```

需要注意,这里用到的是 User.objects.create(xxx)

在查查数据库,可以看到 lisi 这条数据了。

06.png

bulk_create()

save()create() 都是逐条数据插入的,如果需要批量插入数据的话可以使用 bulk_create()

```python from account.models import User

userobjwangwu = User(username='wangwu', password='22222', email='wangwu@qq.com')

userobjzhaoliu = User(username='zhaoliu', password='33333', email='zhaoliu@qq.com')

userlist = [userobjwangwu, userobj_zhaoliu]

User.objects.bulkcreate(userlist) ```

在这段代码中,创建了 wangwuzhaoliu 两个用户对象,然后把这两项放进 user_list 列表里。最后调用 User.objects.bulk_create() 方法插入数据。

07.png

查询数据

查询数据的常用方法有3种:

  • all():返回所有数据
  • get():按照查询条件返回单条数据
  • filter():按照查询条件返回多条数据

当然啦,查询数据的方法是不止这三种的,入门阶段先介绍这两种比较常用的方法。

all()

all() 方法可以查询所有数据,比如查询我们刚刚创建的4个用户。

```python from account.models import User

users = User.objects.all() print(users) ```

08.png

可以清楚的看到,打印输出了4条数据。

在上一段代码的基础上,我们可以循环输出看看这4条数据的 username 分别是什么。

python for user in users: print(user.username)

09.png

这就是 all() 的使用方法。

get()

有时候我们不需要把所有数据都查出来,而是需要按条件进行查询。

此时可以使用 get()filter(),先介绍 get()

get() 方法会按照指定的条件去查询,并返回一条数据。在需要登录的场景,可以通过 get() 的方式去查询相关的用户名和密码。

如果查询的数据不存在会报错,建议使用try包着。

如果查询的记录多与1条也会报错!

比如我们要查询 id 为2的用户,并打印它的 username ,可以这么写。

```python from account.models import User

user = User.objects.get(id=2) print(user.username) ```

10.png

因为在 user 表里,id 就是主键,我们同样可以通过主键去查询。

python user = User.objects.get(pk=2) print(user.username)

11.png

除此之外你还可以通过 username 或者其他字段去查询。

python user = User.objects.get(username='zhangsan')

filter()

如果你需要按条件范围去查询,可以使用 filter() 方法。

比如查询 id 大于2的用户。

```python from account.models import User

users = User.objects.filter(id__gt=2) for user in users: print(user.username) ```

12.png

这里可能你会疑惑,为什么不是 id>2 ,而是 id__gt=2

这是 Django 的语法。

比较时常用的关键字:

  • gt:大于某个值
  • gte:大于或等于某个值
  • lt:小于某个值
  • lte:小于或等于
  • isnull:是否为空

是否包含**字符串:

  • icontains:不区分大小写
  • contains:包含**值
  • in:在**选项(列表)之内

以**开始/结束

  • startswith, istartwith:以**开头
  • endswith, iendswith:以**结束

其他查询方法之后用到再讲解,现在只需大概知道可以用上面的方法去查即可。

更新/修改数据

修改数据的方法同样有3种:

  • save() :修改单条
  • update() :修改单条数据的多个字段

在修改数据之前,首先我们要明确修改哪条数据。所以会用到 get()filter() 方法。

save()

save() 和前面讲新增数据时用到的 save() 是一样的,有点覆盖的意思。

举个例子,将 usernamezhangsanemail@qq 修改成 @163

```python from account.models import User

user = User.objects.get(username='zhangsan') user.email = 'zhangsan@163.com' user.save() ```

此时我们在数据库查一下 zhangsan 这条数据的所有信息,可以看到邮箱已经改过来了。

13.png

update()

update() 方法可以将上面使用 save() 的代码简化到一行。

比如,此时我要将 lisipassword 改成 666

```python from account.models import User

User.objects.filter(username='lisi').update(password='666') ```

再查看一下数据库。

14.png

需要注意!用 update() 方法前,要用 filter() 找到要修改的那些数据,不能使用 get()

删除数据

最后要介绍的是删除数据。在 Django 里使用 delete() 方法可以删除数据。但真实项目中很少用到这个方法,因为这个方法会真实删除数据库里的数据,删掉后要恢复就比较麻烦了。所以通常会给数据增加一个字段来判断这条数据是否被删除,也就是逻辑删除,是一种假删除的方法,用到的是前面介绍的 update() 方法来操作。

但学技能要学全,我们还是要了解一下 delete() 怎么使用。

delete()

delete() 的用法和前面 save()update() 都差不多。

首先还是要找到要删除的那条数据,用的还是 filter() 方法去查找。

找到后再调用 delete() 方法直接删除即可。

比如,我要删除 usernamezhaoliu 这条数据。

```python from account.models import User

user = User.objects.filter(username='zhaoliu') user.delete() ```

执行完上面的代码后,再查一下数据库,zhaoliu 这条数据已经消失了。

15.png


在日常开发中,“查数据”的工作是最大的。本文只是简单的介绍了 get()filter() 方法。真正查数据的话其实还有很多方法去协助我们的,而且还有很多“且”和“或”的条件判断。

在入门阶段可以先浅浅的学一下,毕竟学太多也记不住。更重要的还是要在项目中实战。实战时遇到不懂的地方再查,记忆就深刻很多了。

以上就是本文的全部内容,如果本文对你有帮助,可以转发给你的好友,大家一起进步!


IMG_5580.GIF

点赞 + 关注 + 收藏 = 学会了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/36628.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++之STL(十二)

1、容器适配器 #include <iostream> #include <stack> #include <list> #include <queue> #include <functional> #include <iterator>using namespace std;int main() {// 栈&#xff08;先进后出filo&#xff09;stack<int, list<…

基于PHP的长城景区信息管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的长城景区信息管理系统 一 介绍 此长城景区信息管理系统基于原生PHP开发&#xff0c;数据库mysql。系统角色分为用户和管理员。 技术栈&#xff1a;phpmysqlphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 浏览长城景区信息(旅…

Unity解决报错:Execution failed for task ‘:unityLibrary:BuildIl2CppTask‘

目录 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报错(虽然会自动生成temp的AS工程&#xff0c;经过打开验证 也是无解的)&#xff1b; 唯一解决办法&#xff1a;Unity导出As工程没问题&#xff1b; 编辑器版本2020.3.33f1 及 2021.3.15f1 直接导出apk或aar报…

[电子电路学]电路分析基本概念1

第一章 电路分析的基本概念和基本定律 电路模型 反映实际电路部件的主要电磁性质的理想电路元件及其组合&#xff0c;是实际电路电气特性的抽象和近似。 理想电路元件 实际电路器件品种繁多&#xff0c;其电磁特性多元而复杂&#xff0c;分析和计算时非常困难。而理想电路元件…

一款开源、免费、现代化风格的WPF UI控件库

前言 今天大姚给大家分享一款开源&#xff08;MIT License&#xff09;、免费、现代化风格的WPF UI控件库&#xff1a;ModernWpf。 项目介绍 ModernWpf是一个开源项目&#xff0c;它为 WPF 提供了一组现代化的控件和主题&#xff0c;使开发人员能够创建具有现代外观的桌面应…

【pytorch09】数学运算

1.数学操作 add/minus/multiply/dividematmulpowsqrt/rsqrtround 2.加减乘除 加法 矩阵乘法 torch.mm 只适用于2d torch.matmul 要分清楚是矩阵元素相乘&#xff0c;还是矩阵相乘 例子 x一共有4张照片&#xff0c;每张照片打平成784的向量&#xff0c;希望降维得到[4,51…

戴尔笔记本重装系统?笔记本卡顿失灵?一键重装系统!

随着科技的快速发展&#xff0c;笔记本电脑已成为我们日常生活和工作中不可或缺的工具。然而&#xff0c;随着时间的推移&#xff0c;笔记本可能会遇到各种问题&#xff0c;如系统卡顿、失灵等。这时&#xff0c;重装系统往往是一个有效的解决方案。本文将详细介绍如何在戴尔笔…

ONLYOFFICE 8.1编辑器桌面应用程序来袭——在线全面测评

目录 ✈下载✈ &#x1f440;界面&#x1f440; &#x1f44a;功能&#x1f44a; &#x1f9e0;幻灯片版式的重大改进&#x1f9e0; ✂无缝切换文档编辑、审阅和查看模式✂ &#x1f3b5;在演示文稿中播放视频和音频文件&#x1f3b5; &#x1f917;版本 8.1&#xff1a…

一键生成AI动画视频?Animatediff 和 ComfyUI 更配哦!

大家好我是极客菌&#xff01; 之前我分享过 Animatediff 在 WebUI 中的应用&#xff0c;最近不是在分享 ComfyUI 嘛&#xff0c;那我们也来讲讲 Animatediff 在 ComfyUI 的应用。 如果从工作流和内存利用率的角度来说&#xff0c;Animatediff 和 ComfyUI 可能更配一些&#…

深入理解SSH:网络安全的守护者

在当今数字化时代&#xff0c;网络安全已成为全球关注的焦点。随着网络攻击手段的不断升级&#xff0c;保护数据传输的安全性变得尤为重要。SSH&#xff08;Secure Shell&#xff09;作为一种安全的网络协议&#xff0c;为远程登录和网络服务提供了强大的安全保障&#xff0c;成…

Duix - 硅基数字人SDK

简介 Introduction DUIX(Dialogue User Interface System)是硅基智能打造的AI数字人智能交互平台。通过将数字人交互能力开源,开发者可自行接入多方大模型、语音识别(ASR)、语音合成(TTS)能力,实现数字人实时交互,并在Android和iOS多终端一键部署,让每个开发者可轻松…

4A的「A」会变成AI的「A」吗?

戛纳国际创意节上&#xff0c;广告集团WPP的全球CEO Mark Read 和英国CEO Karen Blackett 解释了WPP如何应对AIGC所带来的「威胁」。同时&#xff0c;Mark Read 与Elon Musk对话&#xff0c;讨论「技术创新的变革力量&#xff0c;人工智能如何重塑创造力、商业和社会&#xff0…

合芯科技冯春阳博士受邀出席苏州大学技术分享会

近日&#xff0c;苏州大学电子信息学院与合芯科技苏州公司成功举办“新时代与‘芯’相遇&#xff0c;科技赋能向未来”的技术分享会。合芯科技冯春阳博士进行了主题为“高性能CPU关键技术与发展现状”的专题分享&#xff0c;并参加导师聘请仪式。苏州大学电子信息学院党委副书记…

苹果电脑有什么好玩的游戏 Windows电脑上的游戏怎么在Mac电脑玩

苹果电脑不仅在工作和生产领域备受推崇&#xff0c;其游戏领域也同样令人惊艳。从经典的策略游戏到刺激的竞技游戏&#xff0c;苹果平台上有着丰富多样的游戏选择&#xff0c;满足了不同玩家的喜好和需求。下面我们来看看苹果电脑有什么好玩的游戏&#xff0c;Windows电脑上的游…

开源模型破局OpenAI服务限制,15分钟灵活搭建RAG和Agent应用

简介&#xff1a; 今天&#xff0c;我们做了两个实验&#xff0c;目标在15分钟内&#xff0c;完成下载社区的开源模型&#xff0c;部署成API&#xff0c;替换LlamaIndex中RAG和LangChain中OpenAI接口Agent的最佳实践&#xff0c;并取得符合预期的结果。 实验一 实验目标&…

Spring Cloud Gateway 与 Nacos 的完美结合

在现代微服务架构中&#xff0c;服务网关扮演着至关重要的角色。它不仅负责路由请求到相应的服务&#xff0c;还承担着诸如负载均衡、安全认证、限流熔断等重要功能。Spring Cloud Gateway 作为 Spring Cloud 生态系统中的一员&#xff0c;以其强大的功能和灵活的配置&#xff…

浅谈linux(1)

文章目录 一、linux1.1、使用终端xshell登陆到云服务器上1.2、linux一些常用命令1.2.1、一些快捷键1.2.2、关于目录的操作1.2.3、关于文件的命令1.2.4、关于目录的命令1.2.5、vim 针对文件进行编辑 一、linux linux 操作系统&#xff0c;我使用的是发行版&#xff0c;Centos7。…

腾讯实时语音编码大突破 电梯、地库里通话也不卡顿

腾讯宣布&#xff0c;腾讯主导的新一代实时语音编码行业标准AVS3P10&#xff0c;即将正式对外发布。由腾讯会议天籁实验室携手腾讯AI Lab研发的Penguins编解码器&#xff08;即AVS3P10行业标准的原型&#xff09;&#xff0c;把经典信号处理和最新的深度学习技术结合在一起&…

Py之dashscope:dashscope的简介、安装和使用方法、案例应用之详细攻略

Py之dashscope&#xff1a;dashscope的简介、安装和使用方法、案例应用之详细攻略 目录 dashscope的简介 1、产品的主要特点和优势包括&#xff1a; dashscope的安装和使用方法 1、安装 2、使用方法 dashscope的案例应用 1、通义千问-Max&#xff1a;通义千问2.5系列 2…

【专业性强】地球科学SCI期刊,中科院2区,学术影响力大

一、期刊名称 GIScience & Remote Sensing 二、期刊简介概况 期刊类型&#xff1a;SCI 学科领域&#xff1a;地球科学 影响因子&#xff1a;6.7 中科院分区&#xff1a;2区 三、期刊征稿范围 GIScience & Remote Sensing是一本完全开放获取的期刊&#xff0c;发表…