python 连接各类主流数据库的实例代码


Posted in Python onJanuary 30, 2018

本篇博文主要介绍Python连接各种数据库的方法及简单使用

包括关系数据库:sqlite,mysql,mssql

非关系数据库:MongoDB,Redis

代码写的比较清楚,直接上代码

1.连接sqlite

# coding=utf-8
# http://www.runoob.com/sqlite/sqlite-python.html
import sqlite3
import traceback

try:
 # 如果表不存在,就创建
 with sqlite3.connect('test.db') as conn:

  print("Opened database successfully")

  # 删除表
  conn.execute("DROP TABLE IF EXISTS COMPANY")

  # 创建表
  sql = """
     CREATE TABLE IF NOT EXISTS COMPANY
    (ID INTEGER PRIMARY KEY  AUTOINCREMENT,
    NAME   TEXT NOT NULL,
    AGE   INT  NOT NULL,
    ADDRESS  CHAR(50),
    SALARY   REAL);
  """
  conn.execute(sql)

  print("create table successfully")

  # 添加数据
  conn.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES (?, ?, ?, ? )",
       [('Paul', 32, 'California', 20000.00),
       ('Allen', 25, 'Texas', 15000.00),
       ('Teddy', 23, 'Norway', 20000.00),
       ('Mark', 25, 'Rich-Mond ', 65000.00),
       ('David', 27, 'Texas', 85000.00),
       ('Kim', 22, 'South-Hall', 45000.00),
       ('James', 24, 'Houston', 10000.00)])
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ( 'Paul', 32, 'California', 20000.00 )")
  #
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ('Allen', 25, 'Texas', 15000.00 )")
  #
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ('Teddy', 23, 'Norway', 20000.00 )")
  #
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ( 'Mark', 25, 'Rich-Mond ', 65000.00 )")
  #
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ( 'David', 27, 'Texas', 85000.00 )");
  #
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ( 'Kim', 22, 'South-Hall', 45000.00 )")
  #
  # conn.execute("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY)\
  # VALUES ( 'James', 24, 'Houston', 10000.00 )")

  # 提交,否则重新运行程序时,表中无数据
  conn.commit()
  print("insert successfully")

  # 查询表
  sql = """
   select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY
   """

  result = conn.execute(sql)

  for row in result:
   print("-" * 50) # 输出50个-,作为分界线
   print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐
   print("%-10s %s" % ("name", row[1]))
   print("%-10s %s" % ("age", row[2]))
   print("%-10s %s" % ("address", row[3]))
   print("%-10s %.2f" % ("salary", row[4]))
   # or
   # print('{:10s} {:.2f}'.format("salary", row[4]))


except sqlite3.Error as e:
 print("sqlite3 Error:", e)
 traceback.print_exc()

2.连接mysql

2.1使用mysqldb库中的_mysql

#! /usr/bin/env python2.7
# coding=utf-8
# Created by xiaosanyu at 16/5/30

# mysqldb 只支持python2.7
# http://mysql-python.sourceforge.net/

import MySQLdb
from contextlib import closing
import traceback

try:
 # 获取一个数据库连接
 with closing(MySQLdb.connect(host='localhost', user='root', passwd='root', db='test', port=3306,charset='utf8')) as conn:
  print("connect database successfully")
  with closing(conn.cursor()) as cur:
   # 删除表
   cur.execute("DROP TABLE IF EXISTS COMPANY")
   # 创建表
   sql = """
      CREATE TABLE IF NOT EXISTS COMPANY
     (ID INTEGER PRIMARY KEY NOT NULL auto_increment,
     NAME   TEXT NOT NULL,
     AGE   INT  NOT NULL,
     ADDRESS  CHAR(50),
     SALARY   REAL);
   """
   cur.execute(sql)

   print("create table successfully")

   # 添加数据
   # 在一个conn.execute里面里面执行多个sql语句是非法的
   cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",
       [('Paul', 32, 'California', 20000.00),
        ('Allen', 25, 'Texas', 15000.00),
        ('Teddy', 23, 'Norway', 20000.00),
        ('Mark', 25, 'Rich-Mond ', 65000.00),
        ('David', 27, 'Texas', 85000.00),
        ('Kim', 22, 'South-Hall', 45000.00),
        ('James', 24, 'Houston', 10000.00)])

   # 提交,否则重新运行程序时,表中无数据
   conn.commit()
   print("insert successfully")

   # 查询表
   sql = """
    select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY
    """

   cur.execute(sql)

   for row in cur.fetchall():
    print("-" * 50) # 输出50个-,作为分界线
    print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐
    print("%-10s %s" % ("name", row[1]))
    print("%-10s %s" % ("age", row[2]))
    print("%-10s %s" % ("address", row[3]))
    print("%-10s %s" % ("salary", row[4]))

except MySQLdb.Error as e:
 print("Mysql Error:", e)
 traceback.print_exc() # 打印错误栈信息

2.2 使用MySQLdb

#! /usr/bin/env python2.7
# coding=utf-8
# Created by xiaosanyu at 16/5/30

# mysqldb 只支持python2.7
# http://mysql-python.sourceforge.net/

import MySQLdb
from contextlib import closing
import traceback

try:
 # 获取一个数据库连接
 with closing(MySQLdb.connect(host='localhost', user='root', passwd='root', db='test', port=3306,charset='utf8')) as conn:
  print("connect database successfully")
  with closing(conn.cursor()) as cur:
   # 删除表
   cur.execute("DROP TABLE IF EXISTS COMPANY")
   # 创建表
   sql = """
      CREATE TABLE IF NOT EXISTS COMPANY
     (ID INTEGER PRIMARY KEY NOT NULL auto_increment,
     NAME   TEXT NOT NULL,
     AGE   INT  NOT NULL,
     ADDRESS  CHAR(50),
     SALARY   REAL);
   """
   cur.execute(sql)

   print("create table successfully")

   # 添加数据
   # 在一个conn.execute里面里面执行多个sql语句是非法的
   cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",
       [('Paul', 32, 'California', 20000.00),
        ('Allen', 25, 'Texas', 15000.00),
        ('Teddy', 23, 'Norway', 20000.00),
        ('Mark', 25, 'Rich-Mond ', 65000.00),
        ('David', 27, 'Texas', 85000.00),
        ('Kim', 22, 'South-Hall', 45000.00),
        ('James', 24, 'Houston', 10000.00)])

   # 提交,否则重新运行程序时,表中无数据
   conn.commit()
   print("insert successfully")

   # 查询表
   sql = """
    select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY
    """

   cur.execute(sql)

   for row in cur.fetchall():
    print("-" * 50) # 输出50个-,作为分界线
    print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐
    print("%-10s %s" % ("name", row[1]))
    print("%-10s %s" % ("age", row[2]))
    print("%-10s %s" % ("address", row[3]))
    print("%-10s %s" % ("salary", row[4]))

except MySQLdb.Error as e:
 print("Mysql Error:", e)
 traceback.print_exc() # 打印错误栈信息

2.3使用pymysql

2.1和2.2节使用MySQLdb,不支持Python3.x

pymysql对Python2.x和Python3.x的支持都比较好

# Created by xiaosanyu at 16/5/30
# coding=utf-8

# https://github.com/PyMySQL/PyMySQL/
import pymysql
from contextlib import closing
import traceback

try:
 # 获取一个数据库连接,with关键字 表示退出时,conn自动关闭
 # with 嵌套上一层的with 要使用closing()
 with closing(pymysql.connect(host='localhost', user='root', passwd='root', db='test', port=3306,
         charset='utf8')) as conn:

  print("connect database successfully")

  # 获取游标,with关键字 表示退出时,cur自动关闭
  with conn.cursor() as cur:
   # 删除表
   cur.execute("DROP TABLE IF EXISTS COMPANY")
   # 创建表
   sql = """
      CREATE TABLE IF NOT EXISTS COMPANY
     (ID INTEGER PRIMARY KEY NOT NULL auto_increment,
     NAME   TEXT NOT NULL,
     AGE   INT  NOT NULL,
     ADDRESS  CHAR(50),
     SALARY   REAL);
   """
   cur.execute(sql)

   print("create table successfully")

   # 添加数据
   # 在一个conn.execute里面里面执行多个sql语句是非法的
   cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",
       [('Paul', 32, 'California', 20000.00),
        ('Allen', 25, 'Texas', 15000.00),
        ('Teddy', 23, 'Norway', 20000.00),
        ('Mark', 25, 'Rich-Mond ', 65000.00),
        ('David', 27, 'Texas', 85000.00),
        ('Kim', 22, 'South-Hall', 45000.00),
        ('James', 24, 'Houston', 10000.00)])

   # 提交,否则重新运行程序时,表中无数据
   conn.commit()
   print("insert successfully")

   # 查询表
   sql = """
    select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY
    """

   cur.execute(sql)

   for row in cur.fetchall():
    print("-" * 50) # 输出50个-,作为分界线
    print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐
    print("%-10s %s" % ("name", row[1]))
    print("%-10s %s" % ("age", row[2]))
    print("%-10s %s" % ("address", row[3]))
    print("%-10s %s" % ("salary", row[4]))
except pymysql.Error as e:
 print("Mysql Error:", e)
 traceback.print_exc()

3.连接mssql

# Created by xiaosanyu at 16/5/30

# http://www.pymssql.org/en/latest/
import pymssql
from contextlib import closing

try:
 # 先要保证数据库中有test数据库
 # 获取一个数据库连接,with关键字 表示退出时,conn自动关闭
 # with 嵌套上一层的with 要使用closing()
 with closing(pymssql.connect(host='192.168.100.114', user='sa', password='sa12345', database='test', port=1433,
         charset='utf8')) as conn:

  print("connect database successfully")

  # 获取游标,with关键字 表示退出时,cur自动关闭
  with conn.cursor() as cur:
   # 删除表
   cur.execute(
     '''if exists (select 1 from sys.objects where name='COMPANY' and type='U') drop table COMPANY''')
   # 创建表
   sql = """
      CREATE TABLE COMPANY
     (ID INT IDENTITY(1,1) PRIMARY KEY NOT NULL ,
     NAME   TEXT NOT NULL,
     AGE   INT  NOT NULL,
     ADDRESS  CHAR(50),
     SALARY   REAL);
   """
   cur.execute(sql)

   print("create table successfully")

   # 添加数据
   # 在一个conn.execute里面里面执行多个sql语句是非法的
   cur.executemany("INSERT INTO COMPANY (NAME,AGE,ADDRESS,SALARY) VALUES ( %s, %s, %s, %s )",
       [('Paul', 32, 'California', 20000.00),
        ('Allen', 25, 'Texas', 15000.00),
        ('Teddy', 23, 'Norway', 20000.00),
        ('Mark', 25, 'Rich-Mond', 65000.00),
        ('David', 27, 'Texas', 85000.00),
        ('Kim', 22, 'South-Hall', 45000.00),
        ('James', 24, 'Houston', 10000.00)])

   # 提交,否则重新运行程序时,表中无数据
   conn.commit()
   print("insert successfully")

   # 查询表
   sql = """
    select id,NAME,AGE,ADDRESS,SALARY FROM COMPANY
    """

   cur.execute(sql)

   for row in cur.fetchall():
    print("-" * 50) # 输出50个-,作为分界线
    print("%-10s %s" % ("id", row[0])) # 字段名固定10位宽度,并且左对齐
    print("%-10s %s" % ("name", row[1]))
    print("%-10s %s" % ("age", row[2]))
    print("%-10s %s" % ("address", row[3]))
    print("%-10s %s" % ("salary", row[4]))
except pymssql.Error as e:
 print("mssql Error:", e)
 # traceback.print_exc()

4.连接MongoDB

# Created by xiaosanyu at 16/5/30

# https://docs.mongodb.com/ecosystem/drivers/python/
# https://pypi.python.org/pypi/pymongo/

import pymongo
from pymongo.mongo_client import MongoClient
import pymongo.errors
import traceback

try:
 # 连接到 mongodb 服务
 mongoClient = MongoClient('localhost', 27017)
 # 连接到数据库
 mongoDatabase = mongoClient.test
 print("connect database successfully")

 # 获取集合
 mongoCollection = mongoDatabase.COMPANY

 # 移除所有数据
 mongoCollection.remove()

 # 添加数据
 mongoCollection.insert_many([{"Name": "Paul", "Age": "32", "Address": "California", "Salary": "20000.00"},
         {"Name": "Allen", "Age": "25", "Address": "Texas", "Salary": "15000.00"},
         {"Name": "Teddy", "Age": "23", "Address": "Norway", "Salary": "20000.00"},
         {"Name": "Mark", "Age": "25", "Address": "Rich-Mond", "Salary": "65000.00"},
         {"Name": "David", "Age": "27", "Address": "Texas", "Salary": "85000.00"},
         {"Name": "Kim", "Age": "22", "Address": "South-Hall", "Salary": "45000.00"},
         {"Name": "James", "Age": "24", "Address": "Houston", "Salary": "10000.00"}, ])

 #获取集合中的值
 for row in mongoCollection.find():
  print("-" * 50) # 输出50个-,作为分界线
  print("%-10s %s" % ("_id", row['_id'])) # 字段名固定10位宽度,并且左对齐
  print("%-10s %s" % ("name", row['Name']))
  print("%-10s %s" % ("age", row['Age']))
  print("%-10s %s" % ("address", row['Address']))
  print("%-10s %s" % ("salary", row['Salary']))

 print('\n\n\n')
 # 使id自增
 mongoCollection.remove()
 # 创建计数表
 mongoDatabase.counters.save({"_id": "people_id", "sequence_value": 0})
 # 创建存储过程
 mongoDatabase.system_js.getSequenceValue = '''function getSequenceValue(sequenceName){
   var sequenceDocument = db.counters.findAndModify({
    query: {_id: sequenceName},
    update: {$inc:{sequence_value: 1}},
    new:true
   });
   return sequenceDocument.sequence_value;
  }'''
 mongoCollection.insert_many(
   [{"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Paul", "Age": "32",
    "Address": "California", "Salary": "20000.00"},
    {"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Allen", "Age": "25",
    "Address": "Texas", "Salary": "15000.00"},
    {"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Teddy", "Age": "23",
    "Address": "Norway", "Salary": "20000.00"},
    {"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Mark", "Age": "25",
    "Address": "Rich-Mond", "Salary": "65000.00"},
    {"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "David", "Age": "27",
    "Address": "Texas", "Salary": "85000.00"},
    {"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "Kim", "Age": "22",
    "Address": "South-Hall", "Salary": "45000.00"},
    {"_id": mongoDatabase.eval("getSequenceValue('people_id')"), "Name": "James", "Age": "24",
    "Address": "Houston", "Salary": "10000.00"}, ])

 for row in mongoCollection.find():
  print("-" * 50) # 输出50个-,作为分界线
  print("%-10s %s" % ("_id", int(row['_id']))) # 字段名固定10位宽度,并且左对齐
  print("%-10s %s" % ("name", row['Name']))
  print("%-10s %s" % ("age", row['Age']))
  print("%-10s %s" % ("address", row['Address']))
  print("%-10s %s" % ("salary", row['Salary']))
except pymongo.errors.PyMongoError as e:
 print("mongo Error:", e)
 traceback.print_exc()

5.连接Redis

5.1使用redis

# coding=utf-8
# Created by xiaosanyu at 16/5/31

# https://pypi.python.org/pypi/redis/2.10.5
# http://redis-py.readthedocs.io/en/latest/#
import redis

r = redis.Redis(host='localhost', port=6379, db=0, password="12345")
print("connect", r.ping())

# 看信息
info = r.info()
# or 查看部分信息
# info = r.info("Server")

# 输出信息
items = info.items()
for i, (key, value) in enumerate(items):
 print("item %s----%s:%s" % (i, key, value))

# 删除键和对应的值
r.delete("company")

# 可以一次性push一条或多条数据
r.rpush("company", {"id": 1, "Name": "Paul", "Age": "32", "Address": "California", "Salary": "20000.00"},
  {"id": 2, "Name": "Allen", "Age": "25", "Address": "Texas", "Salary": "15000.00"},
  {"id": 3, "Name": "Teddy", "Age": "23", "Address": "Norway", "Salary": "20000.00"})
r.rpush("company", {"id": 4, "Name": "Mark", "Age": "25", "Address": "Rich-Mond", "Salary": "65000.00"})
r.rpush("company", {"id": 5, "Name": "David", "Age": "27", "Address": "Texas", "Salary": "85000.00"})
r.rpush("company", {"id": 6, "Name": "Kim", "Age": "22", "Address": "South-Hall", "Salary": "45000.00"})
r.rpush("company", {"id": 7, "Name": "James", "Age": "24", "Address": "Houston", "Salary": "10000.00"})

# eval用来将dict格式的字符串转换成dict
for row in map(lambda x: eval(x), r.lrange("company", 0, r.llen("company"))):
 print("-" * 50) # 输出50个-,作为分界线
 print("%-10s %s" % ("_id", row['id'])) # 字段名固定10位宽度,并且左对齐
 print("%-10s %s" % ("name", row['Name']))
 print("%-10s %s" % ("age", row['Age']))
 print("%-10s %s" % ("address", row['Address']))
 print("%-10s %s" % ("salary", row['Salary']))

# 关闭当前连接
# r.shutdown() #这个是关闭redis服务端

5.2使用pyredis

# Created by xiaosanyu at 16/5/30

# http://pyredis.readthedocs.io/en/latest/
import pyredis

r = pyredis.Client(host='localhost', port=6379, database=0, password="12345")
print("connect", r.ping().decode("utf-8"))

# 看信息

# info = r.execute("info").decode()
# or 查看部分信息
info = r.execute("info", "Server").decode()

# 输出信息
print(info)

# 删除键和对应的值
r.delete("company")

# 可以一次性push一条或多条数据
r.rpush("company", '''{"id": 1, "Name": "Paul", "Age": "32", "Address": "California", "Salary": "20000.00"}''',
  '''{"id": 2, "Name": "Allen", "Age": "25", "Address": "Texas", "Salary": "15000.00"}''',
  '''{"id": 3, "Name": "Teddy", "Age": "23", "Address": "Norway", "Salary": "20000.00"}''')
r.rpush("company", '''{"id": 4, "Name": "Mark", "Age": "25", "Address": "Rich-Mond", "Salary": "65000.00"}''')
r.rpush("company", '''{"id": 5, "Name": "David", "Age": "27", "Address": "Texas", "Salary": "85000.00"}''')
r.rpush("company", '''{"id": 6, "Name": "Kim", "Age": "22", "Address": "South-Hall", "Salary": "45000.00"}''')
r.rpush("company", '''{"id": 7, "Name": "James", "Age": "24", "Address": "Houston", "Salary": "10000.00"}''')

# eval用来将dict格式的字符串转换成dict
for row in map(lambda x: eval(x), r.lrange("company", 0, r.llen("company"))):
 print("-" * 50) # 输出50个-,作为分界线
 print("%-10s %s" % ("_id", row['id'])) # 字段名固定10位宽度,并且左对齐
 print("%-10s %s" % ("name", row['Name']))
 print("%-10s %s" % ("age", row['Age']))
 print("%-10s %s" % ("address", row['Address']))
 print("%-10s %s" % ("salary", row['Salary']))

# 关闭当前连接
r.close()

代码下载:python_connect_database

以上这篇python 连接各类主流数据库的实例代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python模块学习 re 正则表达式
May 19 Python
Python用GET方法上传文件
Mar 10 Python
python 从文件夹抽取图片另存的方法
Dec 04 Python
python画图系列之个性化显示x轴区段文字的实例
Dec 13 Python
Python面向对象程序设计构造函数和析构函数用法分析
Apr 12 Python
python 使用socket传输图片视频等文件的实现方式
Aug 07 Python
解决python父线程关闭后子线程不关闭问题
Apr 25 Python
Python实现查找数据库最接近的数据
Jun 08 Python
Django cookie和session的应用场景及如何使用
Apr 29 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
Python基础之条件语句详解
Jun 16 Python
python简单验证码识别的实现过程
Jun 20 Python
python操作oracle的完整教程分享
Jan 30 #Python
Python使用wxPython实现计算器
Jan 30 #Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 #Python
python实现简易版计算器
Jun 22 #Python
python列表的增删改查实例代码
Jan 30 #Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 #Python
Python Tkinter实现简易计算器功能
Jan 30 #Python
You might like
附件名前加网站名
2008/03/23 PHP
php session安全问题分析
2011/06/24 PHP
PHP实现多级分类生成树的方法示例
2017/02/07 PHP
php实现的二叉树遍历算法示例
2017/06/15 PHP
如何利用预加载优化Laravel Model查询详解
2017/08/11 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
PHP扩展类型及安装方式解析
2020/04/27 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
jQuery模拟新浪微博首页滚动效果的方法
2015/03/11 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
JavaScript和jQuery获取input框的绝对位置实现方法
2016/10/13 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
js微信支付实现代码
2016/12/22 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
AngularJS中控制器函数的定义与使用方法示例
2017/10/10 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
2019/11/08 Javascript
vue实现员工信息录入功能
2020/06/11 Javascript
vscode中Vue别名路径提示的实现
2020/07/31 Javascript
Python+Socket实现基于UDP协议的局域网广播功能示例
2017/08/31 Python
Python金融数据可视化汇总
2017/11/17 Python
对python函数签名的方法详解
2019/01/22 Python
在Qt5和PyQt5中设置支持高分辨率屏幕自适应的方法
2019/06/18 Python
Python qqbot 实现qq机器人的示例代码
2019/07/11 Python
解决python 找不到module的问题
2020/02/12 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
Cotton On南非:澳洲时尚平价品牌
2018/06/28 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
巴西一家专门从事家居和装饰的连锁店:Camicado
2019/08/14 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
小学优秀教师先进事迹材料
2014/12/16 职场文书
2015年项目工作总结
2015/04/29 职场文书
常住证明范本
2015/06/23 职场文书
一劳永逸彻底解决pip install慢的办法
2021/05/24 Python