{ "cells": [ { "cell_type": "markdown", "id": "16706c4a", "metadata": {}, "source": [ "# 连接数据库SQLite\n", "\n", "## 准备数据\n", " 之前的章节我们已经测试了Request API接口,并且把代码做了规范化处理。本节练习中,我们需要先把一些函数从notebook中导出到py文件中,这样就可以复用了。\n", " \n", "***需要注意的是: Pycharm中软件帮我们设置了项目的根目录,并且把根目录包含在系统path中。所以当我们用import导入时,python可以找到我们自己写的模块。 这里我们采用的是原生的jupyter notebook,需要手动将我们的模块添加到系统path中。一种方法是手动添加到环境变量中,这是永久方法。还有一种方法是添加临时path。本文就是采用后一种方式。***\n" ] }, { "cell_type": "code", "execution_count": 2, "id": "5a28f37f", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "C:\\Users\\renb\\PycharmProjects\\weather_dashapp\\weather_book\n" ] } ], "source": [ "import os\n", "import sys\n", "\n", "module_path = os.path.abspath(os.path.join('..'))\n", "print(module_path)\n", "if module_path not in sys.path:\n", " sys.path.append(module_path)" ] }, { "cell_type": "markdown", "id": "55dc985d", "metadata": {}, "source": [ "## 项目结构\n", "```\n", "weather_book\n", "├───.ipynb_checkpoints\n", "├───data\n", "├───steps <-- notebook 主要在这里\n", "├───weather_app\n", "│ ├───models <-- 函数写在这里\n", "\n", "```\n", "添加完path之后,就可以导入自己的模块了。 注意如果是上面的路径中采用的“..”,说明只返回上一层,如果是“../..\",说明返回了两层。 \n", "返回一层和两层对我的项目的区别是,以下代码是否需要包含weather_book。\n", "如果只返回一层,系统可以直接找到weather_app 模块,但是无法找到weather_book(因为已经在weather_book模块内了,不识模块真面目,只缘身在此山中)。" ] }, { "cell_type": "code", "execution_count": 3, "id": "0428fda7", "metadata": {}, "outputs": [], "source": [ "from weather_app.models.query_api import get_geo_from_city,generate_url,request_weather_info,transform_weather_raw,add_city_info" ] }, { "cell_type": "markdown", "id": "95c4ada3", "metadata": {}, "source": [ "一个好的习惯是,对你的函数进行快速测试。" ] }, { "cell_type": "code", "execution_count": 4, "id": "ecc46534", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
cloudcoverlifted_indexprec_typeprec_amounttemp2mrh2mweathertimestampwind_directionwind_speedlongitudelatitudecity
0915none0554cloudyday2022-02-03 03:00:00NE3121.46920731.232276shanghai
1915none0551cloudyday2022-02-03 06:00:00NE3121.46920731.232276shanghai
2915none1475cloudyday2022-02-03 09:00:00NE3121.46920731.232276shanghai
3915rain1482lightrainnight2022-02-03 12:00:00NE3121.46920731.232276shanghai
4915rain1468lightrainnight2022-02-03 15:00:00NE2121.46920731.232276shanghai
..........................................
59315none4571pcloudynight2022-02-10 12:00:00E3121.46920731.232276shanghai
60915none4571cloudynight2022-02-10 15:00:00SE2121.46920731.232276shanghai
61915none4574cloudynight2022-02-10 18:00:00SE2121.46920731.232276shanghai
62915none4575cloudynight2022-02-10 21:00:00NE3121.46920731.232276shanghai
63915none4562cloudyday2022-02-11 00:00:00NE3121.46920731.232276shanghai
\n", "

64 rows × 13 columns

\n", "
" ], "text/plain": [ " cloudcover lifted_index prec_type prec_amount temp2m rh2m \\\n", "0 9 15 none 0 5 54 \n", "1 9 15 none 0 5 51 \n", "2 9 15 none 1 4 75 \n", "3 9 15 rain 1 4 82 \n", "4 9 15 rain 1 4 68 \n", ".. ... ... ... ... ... ... \n", "59 3 15 none 4 5 71 \n", "60 9 15 none 4 5 71 \n", "61 9 15 none 4 5 74 \n", "62 9 15 none 4 5 75 \n", "63 9 15 none 4 5 62 \n", "\n", " weather timestamp wind_direction wind_speed longitude \\\n", "0 cloudyday 2022-02-03 03:00:00 NE 3 121.469207 \n", "1 cloudyday 2022-02-03 06:00:00 NE 3 121.469207 \n", "2 cloudyday 2022-02-03 09:00:00 NE 3 121.469207 \n", "3 lightrainnight 2022-02-03 12:00:00 NE 3 121.469207 \n", "4 lightrainnight 2022-02-03 15:00:00 NE 2 121.469207 \n", ".. ... ... ... ... ... \n", "59 pcloudynight 2022-02-10 12:00:00 E 3 121.469207 \n", "60 cloudynight 2022-02-10 15:00:00 SE 2 121.469207 \n", "61 cloudynight 2022-02-10 18:00:00 SE 2 121.469207 \n", "62 cloudynight 2022-02-10 21:00:00 NE 3 121.469207 \n", "63 cloudyday 2022-02-11 00:00:00 NE 3 121.469207 \n", "\n", " latitude city \n", "0 31.232276 shanghai \n", "1 31.232276 shanghai \n", "2 31.232276 shanghai \n", "3 31.232276 shanghai \n", "4 31.232276 shanghai \n", ".. ... ... \n", "59 31.232276 shanghai \n", "60 31.232276 shanghai \n", "61 31.232276 shanghai \n", "62 31.232276 shanghai \n", "63 31.232276 shanghai \n", "\n", "[64 rows x 13 columns]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "city = 'shanghai'\n", "lon, lat = get_geo_from_city(city)\n", "url = generate_url(lon, lat)\n", "text_j = request_weather_info(url)\n", "weather_info_df = transform_weather_raw(text_j)\n", "weather_info_df = add_city_info(weather_info_df, lon, lat, city)\n", "weather_info_df" ] }, { "attachments": { "sqla_arch_small.png": { "image/png": "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" } }, "cell_type": "markdown", "id": "84e561b0", "metadata": {}, "source": [ "## 引入SQLite\n", "我们可以使用任意的关系数据库保存这些数据,但是这里我强烈推荐SQLite,因为它轻量,无无服务器,免安装,开箱即用。对于新手来说,完全是无痛体验。\n", "但是它支持标准的SQL查询语言的功能,我们一样可以用它练习数据库的增删查操作。\n", "\n", "如果想快速入门,可以参考中文网站:\n", "https://www.runoob.com/sqlite/sqlite-intro.html#:~:text=SQLite%E6%98%AF%E4%B8%80%E4%B8%AA%E8%BF%9B%E7%A8%8B%E5%86%85,%E7%9B%B4%E6%8E%A5%E8%AE%BF%E9%97%AE%E5%85%B6%E5%AD%98%E5%82%A8%E6%96%87%E4%BB%B6%E3%80%82\n", "\n", "## 使用 SQLAlchemy\n", "我们已经选择了SQLite 作为我们的数据库,作为“客户端”python和数据库之间的衔接,我们可以选择很多库,这里推荐的是SQLAlchemy。\n", "这里对 SQLAlchemy做一个简单介绍,SQLAlchemy 是用于处理数据库和Python的工具。他的主要组成其实是两部分:core和ORM。 core属于低阶API,ORM属于高阶API。也就是说,ORM建立在Core上。\n", "\n", "\n", "![sqla_arch_small.png](attachment:sqla_arch_small.png)\n", "首先我们需要安装SQLAlchemy,采用pip安装。\n", "\n", "```pip install sqlalchemy```\n", "\n", "https://docs.sqlalchemy.org/en/14/tutorial/index.html" ] }, { "cell_type": "markdown", "id": "41932386", "metadata": {}, "source": [ "首先我们需要建立对话,调用create_engine 函数。对于SQLite 来说,URL格式就是本地数据库(文件)的路径,这里我需要在当前文件夹生成这个数据库,所以不会添加其他相对路径,只有一个文件名而已。" ] }, { "cell_type": "code", "execution_count": 5, "id": "4a97057e", "metadata": {}, "outputs": [], "source": [ "from sqlalchemy import create_engine" ] }, { "cell_type": "code", "execution_count": 6, "id": "768148b5", "metadata": {}, "outputs": [], "source": [ "engine = create_engine('sqlite:///weather.db')" ] }, { "cell_type": "code", "execution_count": 7, "id": "61006046", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Engine(sqlite:///weather.db)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "engine" ] }, { "cell_type": "markdown", "id": "b4248004", "metadata": {}, "source": [ "想要做增删查的操作,就需要建立一个Session会话。这样我们就有一个session为我们敞开大门,等着我们进行操作。" ] }, { "cell_type": "code", "execution_count": 8, "id": "ac1aff70", "metadata": {}, "outputs": [], "source": [ "from sqlalchemy.orm import Session" ] }, { "cell_type": "code", "execution_count": 9, "id": "0e65d2b8", "metadata": {}, "outputs": [], "source": [ "session = Session(engine)" ] }, { "cell_type": "code", "execution_count": 10, "id": "bab392fa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "session" ] }, { "cell_type": "markdown", "id": "565df164", "metadata": {}, "source": [ "## 使用ORM 管理表\n", "使用ORM最常见的方式就是使用 declarative_base() 函数构造一个基类,该函数会将声明性映射应用于从它派生的所有子类。所以我们需要建立class,然后从Base继承。\n", "(https://docs.sqlalchemy.org/en/20/orm/mapping_styles.html)\n", "\n", "参考 DataFrame的结构,我们创建一个 Python 类,并将 DataFrame 中的每一列作为属性包含在类中,每个类属性对应表中的特定列。" ] }, { "cell_type": "code", "execution_count": 11, "id": "939774e8", "metadata": {}, "outputs": [], "source": [ "# create database table by defining python class\n", "from sqlalchemy.orm import declarative_base\n", "from sqlalchemy import Column,Integer,String,Float\n", "Base = declarative_base()\n" ] }, { "cell_type": "code", "execution_count": 12, "id": "80fae0f9", "metadata": {}, "outputs": [], "source": [ "class WeatherInfo(Base):\n", " __tablename__ = 'weather'\n", " __table_args__ = {'extend_existing': True}\n", " id = Column(Integer,primary_key=True,autoincrement=True) # use autoincrement\n", " timestamp = Column(String(55))\n", " cloudcover = Column(Integer)\n", " lifted_index = Column(Integer)\n", " prec_type = Column(String(10))\n", " prec_amount = Column(Integer)\n", " temp2m = Column(Integer)\n", " rh2m = Column(Integer)\n", " weather = Column(String(20))\n", " wind_direction = Column(String(4))\n", " wind_speed = Column(Integer)\n", " longitude = Column(Float(precision=10, decimal_return_scale=2))\n", " latitude = Column(Float(precision=10, decimal_return_scale=2))\n", " city=Column(String(50))\n", " \n" ] }, { "cell_type": "markdown", "id": "f2ffe464", "metadata": {}, "source": [ "## 从数据库查询和插入\n", "如下文所示,由于数据表是全新创建的,因此查询得到0结果。\n", "\n", "我们将 DataFrame 插入数据库后,重新查询会获取更多数据。\n", "\n", "```请记住在所有事务之后关闭会话。```" ] }, { "cell_type": "code", "execution_count": 13, "id": "97a196e4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "83393" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Base.metadata.create_all(engine)\n", "result = session.query(WeatherInfo).all()\n", "len(result)" ] }, { "cell_type": "code", "execution_count": 14, "id": "db6e2002", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "64" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "weather_info_df.to_sql('weather',engine,if_exists='append',index=False) # without index" ] }, { "cell_type": "code", "execution_count": 15, "id": "2c23a0f5", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "83393" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "result = session.query(WeatherInfo).all()\n", "len(result)" ] }, { "cell_type": "code", "execution_count": 16, "id": "b7b28fdb", "metadata": {}, "outputs": [], "source": [ "session.close()" ] }, { "cell_type": "code", "execution_count": null, "id": "61ddd0fd", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "dash", "language": "python", "name": "dash" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.6" } }, "nbformat": 4, "nbformat_minor": 5 }