2016-07-20 20 views
0

ostype、ram、cpuの値とıのようなコンピュータに関する情報を含むcsvファイルを持っています。既に同じ情報を持っているSQLデータベースがあります。 Pythonスクリプトによって。データベーステーブルとcsvファイルにはuniqe "id"パラメータがあります。csvファイルをPythonでSQLデータベースに書き込む方法

import csv 
with open("Hypersanal.csv") as csvfile: 
readCSV = csv.reader(csvfile, delimiter=';') 
for row in readCSV: 
    print row 
+0

[SQLALchemy](http://www.sqlalchemy.org/)や[Python-sql](https://pypi.python)などのデータベースに接続できるようにするPythonモジュールをご覧ください。 .org/pypi/python-sql) – HolyDanna

答えて

0

データベースの種類によっては、コードに若干の調整が加えられます。
この例では、ドライバでSQLAlchemyを使用します。接続文字列の最初の部分(接続するデータベースの種類によって異なります)を調べるには、SQLAlchemy Doc about Dialectsをチェックしてください。今、私たちは持っている

Base = declarative_base() 
engine = create_engine(connection_string) 
metadata = MetaData(bind=engine) 

まず、我々は必要なモジュールが

from sqlalchemy import * 
from sqlalchemy.orm import create_session 
from sqlalchemy.ext.declarative import declarative_base 

はその後、我々はSQLAlchemyのために必要な

dialect_part = "mysql+pymysql://" 
# username is the usernmae we'll use to connect to the db, and password the corresponding password 
# server_name is the name fo the server where the db is. It INCLUDES the port number (eg : 'localhost:9080') 
# database is the name of the db on the server we'll work on 
connection_string = dialect_part+username+":"+password+"@"+server_name+"/"+database 

いくつかのより多くのセットアップを接続文字列を作成してインポートしますdbへのリンクですが、何かをする前にもう少し作業が必要です。
私たちがヒットするデータベースのテーブルに対応するクラスを作成します。このクラスは、テーブルがデータベース内のどのようになっているかに応じて自動入力されます。手動で入力することもできます。

class TableWellHit(Base): 
    __table__ = Table(name_of_the_table, metadata, autoload=True) 

、テーブルと対話できるように、我々は、セッションを作成する必要があります。

session = create_session(bind=engine) 

は今、私たちは、セッションを開始する必要がある、と私たちは、設定されます。 コードが使用されます。

import csv 
with open("Hypersanal.csv") as csvfile: 
    readCSV = csv.reader(csvfile, delimiter=';') 
    for row in readCSV: 
     # print row 
     # I chose to push each value from the db one by one 
     # If you're sure there won't be any duplicates for the primary key, you can put the session.begin() before the for loop 
     session.begin() 

     # I create an element for the db 
     new_element = TableWellHit(field_in_table=row[field]) 

このためたとえば、あなたがテーブルでfiels「ユーザ名」と「パスワード」を必要としていた想像し、そして行が「ユーザー」とキーとして「パス」を含むdictionnaryが含まれています。 TableWellHit(username=row['user],password=row['pass'])

 # I add the element to the table 
     # I choose to merge instead of add, so as to prevent duplicates, one more time 
     session.merge(new_element) 

     # Now, we commit our changes to the db 
     # This also closes the session 
     # if you put the session.begin() outside of the loop, do the same for the session.commit() 
     session.commit() 

希望これは、あなたの質問に答えると、彼がいない場合は、ちょうど私が私が私の答えを修正することができますのでお知らせ:
要素により作成されます。

編集:MSSQLの場合

- インストールpymssqlpip install pymssql
connection_stringこのSQLAlchemy pageに応じて、次の形式でなければなりません:mssql+pymssql://<username>:<password>@<freetds_name>/?charset=utf8

使用のマージを作成または値を更新することができますそれがすでに存在するかどうかによって異なります。

+0

こんにちは、ありがとう、私はmssqlとıを使用してı'mを使用してテーブルを更新します。 – Southpaw

+0

@Southpaw私は私の答えの一番下にある編集でこの問題に答えたと思う – HolyDanna

関連する問題