के साथ sqlite में numpy पूर्णांक प्रकारों को सम्मिलित करना पायथन 3 में डेटाबेस में numpy पूर्णांक वस्तुओं के मान डालने का सही तरीका क्या है? अजगर में 2.7 numpy सांख्यिक डेटाटाइप्स SQLite में सफाई से सम्मिलित है, लेकिन वे अजगर में नहीं है 3python3
import numpy as np
import sqlite3
conn = sqlite3.connect(":memory:")
conn.execute("CREATE TABLE foo (id INTEGER NOT NULL, primary key (id))")
conn.execute("insert into foo values(?)", (np.int64(100),)) # <-- Fails in 3
np.float प्रकार अभी भी दोनों 2 और 3.
conn.execute("insert into foo values(?)", (np.float64(101),))
में ठीक से काम करने लगते हैं पायथन 2 में, numpy scalar integer डेटाटाइप अब इंट के उदाहरण नहीं हैं, यहां तक कि इंटीजर-मूल्यवान फ़्लोटिंग पॉइंट संख्याओं को इनट्स में परिवर्तित भी करते हैं।
isinstance(np.int64(1), int) # <- true for 2, false for python 3
क्या यही कारण है कि dbapi अब numpy के साथ सहजता से काम नहीं करता है?
एक numpy पूर्णांक प्रकार संख्या का सिर्फ बाइट प्रतिनिधित्व नहीं है (यह '.item()' मूल्य); एक वस्तु है, लगभग एक तत्व, 0 डी, सरणी के समान ही है। इसलिए मुझे नहीं लगता कि आप इसे डेटाबेस में अपने सभी गंदे महिमा में सहेज सकते हैं। आप इसके पूर्णांक मान, या कुछ बाइट समकक्ष को बचा सकते हैं, लेकिन पूर्ण numpy ऑब्जेक्ट नहीं। उपयोगकर्ता परिभाषित ऑब्जेक्ट उदाहरण को सहेजने के बारे में 'sqlite3' में कुछ भी है? – hpaulj
हमेशा डरावनी अचार-दृष्टिकोण (टेक्स्ट प्रकार को लक्षित करना), या कुछ और आधुनिक और द्विआधारी-आधारित [संदेशपैक] (http://msgpack.org/) (बीएलओबी प्रकार को लक्षित करना) पर आधारित है। – sascha
'100' के बजाय' np.int64 (100) 'को सहेजने का क्या फायदा है? क्या कोई उपयोगी जानकारी है कि आप एक fetch के दौरान ठीक नहीं हो सका? आप देख सकते हैं कि SQLAlchemy जैसे मॉड्यूल एसक्यूएल-ऑब्जेक्ट इंटरफेस को कैसे संभालते हैं। – hpaulj