前提・実現したいこと
SQLAlchemyを使って、日本の株式市場の銘柄のデータベースを作りたいと考えました。
まずは、オンメモリのSQLiteで作れないかと思い、
いろんなサイトのサンプルを使ってソースコードを描いていたのですが、日付の処理で,
エラーが出てしまい、先に進まなくなってしまいました。
非常に基礎的なことで詰まっているようで大変申し訳ないのですが、
ご教示いただけましたら幸甚に存じます。
発生している問題・エラーメッセージ
ValueError: time data "b'20080104'" does not match format '%Y%m%d'
該当のソースコード
Python3
1from numpy import genfromtxt 2from time import time 3from datetime import datetime 4from sqlalchemy import Column, Integer, Float, Date 5from sqlalchemy.ext.declarative import declarative_base 6from sqlalchemy import create_engine 7from sqlalchemy.orm import sessionmaker 8 9def Load_Data(file_name): 10 data = genfromtxt(file_name, delimiter=',', converters={0: lambda s: str(s)}) 11 print(data) 12 return data.tolist() 13 14Base = declarative_base() 15 16class Price_History(Base): 17 #Tell SQLAlchemy what the table name is and if there's any table-specific arguments it should know about 18 __tablename__ = 'Price_History' 19 __table_args__ = {'sqlite_autoincrement': True} 20 #tell SQLAlchemy the name of column and its attributes: 21 id = Column(Integer, primary_key=True, nullable=False) 22 date = Column(Date) 23 opn = Column(Float) 24 hi = Column(Float) 25 lo = Column(Float) 26 close = Column(Float) 27 vol = Column(Float) 28 29t = time() 30 31#Create the database 32engine = create_engine('sqlite:///:memory:') 33engine = create_engine('sqlite:///csv_test.db') 34Base.metadata.create_all(engine) 35 36#Create the session 37session = sessionmaker() 38session.configure(bind=engine) 39s = session() 40 41#try: 42file_name = "1328_test.csv" # sample CSV file used: http://www.google.com/finance/historical?q=NYSE%3AT&ei=W4ikVam8LYWjmAGjhoHACw&output=csv 43print(file_name) 44data = Load_Data(file_name) 45 46# print(data) 47 48for i in data: 49 50 print(type(i[0])) 51 print(i[0]) 52 record = Price_History(**{ 53 'date' : datetime.strptime(i[0], '%Y%m%d').date(), 54 'opn' : i[1], 55 'hi' : i[2], 56 'lo' : i[3], 57 'close' : i[4], 58 'vol' : i[5] 59 }) 60 print("date:{0}, open:{1}, vol:{2}".format(datetime.strptime(i[0], '%Y%m%d').date(), i[1], i[2])) 61 s.add(record) #Add all the records 62 63s.commit() #Attempt to commit all the records 64#except: 65# s.rollback() #Rollback the changes on error 66# print("rollback!") 67#finally: 68# s.close() #Close the connection 69print("Time elapsed: " + str(time() - t) + " s.") #0.091s
試したこと
'bについて調べてみたのですが、byte型として扱われている?ようなのですが、
これをpython3ではどういう風に扱うべきなのかがよくわかりませんでした。
(Pandasとかで読んでも、今までこういう形にならなかったので)
補足情報(FW/ツールのバージョンなど)
python3.6
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/06 01:26