回覆列表
  • 1 # 小小猿愛嘻嘻

    這個實現起來很簡單,就兩步,先讀取excel檔案單元格的值,然後插入SQL資料庫中。下面我介紹一下如何從excel檔案讀取資料,並插入到mysql資料庫中,主要用到openpyxl和pymysql這兩個包,實驗環境win7+python3.6+pycharm5.0+mysql5.5,主要步驟如下:

    1.下載安裝openpyxl和pymysql這兩個包,這裡直接pip install+包名安裝就行,如下圖所示,我的環境都已經安裝:

    2.為了方便演示,我這裡新建了一個test資料表,主要有id,university,和name這三個欄位,如下圖:

    接著新建了一個test.xlsx檔案,主要是把這個excel中的資料插入到test資料表中,樣本資料如下:

    3.資料準備完畢後,我們就可以讀取excel資料了,主要程式碼如下,也就是一個讀取函式,很簡單,不到十行程式碼:

    4.從excel檔案中讀取完資料後,我們就可以往mysql資料庫中插入了,如下圖所示,也就是一個插入函式,程式碼很簡單,十來行程式碼左右:

    程式執行結果如下,已經成功將excel讀取的資料插入到mysql資料庫中:

    至此,一個完整的從excel檔案讀取資料並插入到mysql資料庫的過程便完畢。就整個過程來看,其實不難,就是從excel讀資料,然後插入到SQL資料庫中,只要你熟悉xlrd,openpylx,pynysql等這些常用包,很快就能完成資料的讀和寫,這裡需要注意的是,有一些特殊字元需要進行轉義才能插入資料庫,像"""等,我這裡就不做過多介紹,網上也有很多這方面的教程,你可以參考學習一下,對你的提升也有很大的幫助,希望以上分享的內容能對你有所幫助吧。

  • 2 # 樂圖軟體

    這樣做是不是有點麻煩啊?這種類似的資料管理操作,我們基本上不再用程式碼了,也不用資料庫了,其實有個很簡單的方法,輕鬆搞定了,而且即使不是專業的程式設計師也是可以做到的。(送免費工具,詳見文末)

    直接用EXCEL整合資料庫

    大家都是使用雲表企業應用平臺,實現EXCEL資料的管理,匯入匯出,資料分析,多使用者操作,使用者許可權管理,流程審批等,都用這個軟體就搞定了,比寫程式碼更快還好用。集成了mysql,支援SQL和OR資料庫。

    雲表,本身是一個基於EXCEL的軟體開發平臺,但是不同的是,完全不用程式設計,只需要像EXCEL一樣畫表格,寫中文公式,配置流程許可權,就好了。很簡單,操作和學習沒有難度。所以能簡單的工作,就沒有必須搞那麼複雜。

    用畫表格的方式,製作ERP

    我們常見的軟體,OA,ERP,WMS等都可以輕鬆製作出來。

    而且另外一個你想不到功能,雲表可以自動生成APP

    0程式碼生成手機APP

    只要你在電腦端把要用的功能設計好了,就可以透過很簡單配置,自動生成手機APP,直接可以在手機上實現移動辦公。

    與其他軟體也能整合

    雲表做的軟體,可以雲端也可以本地部署,也就是說網路和內網都可以使用。如果你還要與第三方軟體,比如用友,SAP整合,那也沒有問題,自帶openAPI也可以直接連線資料庫,所以很方便。

    2.透過如下連結下載 https://www.toutiao.com/a1633568409080836

  • 3 # o鬍子先生o

    這個問題蠻複雜的,我之前處理過類似的問題,首先要看你說的匯入是什麼概念,sqlserver的操作介面有直接匯入的功能,其他資料庫不清楚,這種就是把資料直接塞進資料庫,但是Python得server包不一定支援這個功能。我之前的做法是把excel 資料讀取之後放到列表裡面,然後在編輯sql 查詢語言直接插資料到資料庫,需要用到value 關鍵字,資料庫是server08,05版的不支援value。這種方法效率不高一次最多插入1000行資料,需要編輯迴圈多次插入,這種方法好處就是比較靈活,可以選擇性插入想要的資料。其他資料庫應該可以用類似的方法。包用的是pypysqlserver這個包編輯更簡單。

  • 4 # IT老友

    提主沒有說匯入到哪個sql資料庫,我這裡就以匯入sqlite3為例。

    主要分為2步:1,讀取xls檔案的資料 ; 2,寫入sql資料庫

    以下excel原始檔截圖

    import xlrd

    import sqlite3

    file = "H:\\xls\\全國省市縣列表.xls"

    data = xlrd.open_workbook(file)

    table = data.sheets()[0] #第一個sheets

    datalist=[]

    for i in range(1,table.nrows): #總行數

    datalist.append(tuple(table.row_values(i)))

    conn = sqlite3.connect("d:\\database\\country.db") #資料庫檔案的路徑

    cursor = conn.cursor()

    cursor.execute("create table country(province varchar(20),num int,town varchar(30),town varchar(30))") ##建立表

    sql = "insert into country(province,num,city,town) values(?,?,?,?)"

    cursor.executemany(sql,datalist) #插入資料

    conn.commit() #提交資料到資料庫

    conn.close() #關閉連線

    print("匯入完成")

    匯入不同的資料庫有不同的模組,比如mysql使用pymysql模組,具體根據你的需求來。

  • 5 # 海洋與森林

    向來主張拿來主義,下面只是mysql的一個實現,自動由excel的表頭構建表,能看懂的,自己拿去。

    #######################################

    #/usr/bin/env python3

    # -*- coding:utf-8 -*-

    import os

    import sys

    import getopt

    import openpyxl

    import pymysql

    import datetime

    import re

    import itertools

    #資料庫連線配置檔案

    __db_config = {

    "host":"127.0.0.1",

    "port":3306,

    "user":"your.db.username",

    "password":"your.db.password",

    "db":"xls",

    "charset":"utf8"

    }

    ####################

    def usage():

    print( "xls2db.py usage:" )

    print( " xls2db filename(xlsx)" )

    print( " version: 1.0.1" )

    print( " by sun" )

    exit(1)

    #主函式執行

    if __name__ == "__main__":

    if len(sys.argv) != 2:

    usage()

    fname = sys.argv[1]

    if not os.path.exists(fname):

    print("file not exist:", fname)

    exit(2)

    #建立連結

    connection = pymysql.connect(**__db_config)

    print("loadfile:", fname)

    wb = openpyxl.load_workbook(fname)

    for shname in wb.get_sheet_names():

    ws = wb.get_sheet_by_name(shname)

    #過濾空表

    if ws.max_row <= 1:

    break

    #構建建表SQL

    sql = "DROP TABLE IF EXISTS `xls`.`%s`;\n" % (shname)

    sql += "CREATE TABLE `xls`.`%s` (\n `indx` INT NOT NULL AUTO_INCREMENT,\n" % (shname)

    #構建表的結構

    for col in ws.iter_cols(max_row=2):

    if not isinstance(col[0].value, str):

    break;

    if col[1].is_date:

    sql += " `%s` DATETIME NULL DEFAULT NULL, \n" % (col[0].value)

    else:

    sql += " `%s` VARCHAR(64) NULL DEFAULT NULL,\n" % (col[0].value)

    sql += " PRIMARY KEY (`indx`) \n) DEFAULT CHARACTER SET = utf8;\n"

    with connection.cursor() as cursor:

    row_count = cursor.execute( sql );

    print("create table:", shname)

    #構建自增主鍵

    indx = itertools.count(1,1)

    #構建插入語句

    sql = "INSERT IGNORE INTO `xls`.`%s` " % (shname)

    for row in ws.iter_rows(min_row=2):

    insql = sql \

    + "VALUES (%s, " % next(indx) \

    + ", ".join([""%s"" % "".join(filter(lambda x: x not in(""\""), str(var.value))) for var in row]) \

    + ")\n"

    with connection.cursor() as cursor:

    row_count = cursor.execute( insql );

    connection.commit()

    print("insert table(%s), items(%s)" % (shname, next(indx)))

    #關閉資料鏈接

    connection.close()

  • 6 # 藍爵調

    1、用pandas庫讀取excel ,pandas.read_excel()

    2、用pandas.DataFrame.to_sql()存入資料庫

    搞定

  • 7 # 碼上程功

    1, 資料例子:

    2, 基於Python3的指令碼:

    import pandasimport pymysqlpymysql.install_as_MySQLdb()from sqlalchemy import create_engine#cnx = create_engine("mysql+mysqldb://{{username}}:{{password}}@{{hostname}}:{{ip}}/{{dbname}}", echo=False)cnx = create_engine("mysql+mysqldb://root:[email protected]:3306/mysql", echo=False)df = pandas.read_excel(open("D:/temp/Book1.xlsx","rb"), sheetname="Sheet1")df.to_sql(name="table_name", con=cnx, if_exists="append", index=False)

    3, 如果是其他資料庫型別,如oracle或者postgresql.需要改動連線引擎:

    from sqlalchemy import create_engine

    engine = create_engine("postgresql://scott:tiger@localhost:5432/mydatabase")

    engine = create_engine("mysql+mysqldb://scott:tiger@localhost/foo")

    engine = create_engine("oracle://scott:[email protected]:1521/sidname")

    engine = create_engine("mssql+pyodbc://mydsn")

    # sqlite://<nohostname>/<path>

    # where <path> is relative:

    engine = create_engine("sqlite:///foo.db")

    # or absolute, starting with a slash:

    engine = create_engine("sqlite:////absolute/path/to/foo.db")

  • 中秋節和大豐收的關聯?
  • 職場怎樣面對三個“逆期”行為?