[संपादित करें 2: अधिक जानकारी और नीचे जवाब में डिबगिंग ...]समस्या पायथन
मैं एमएस एक्सेस पाठ की एक श्रृंखला में डेटाबेस निर्यात करने के लिए एक अजगर स्क्रिप्ट लिख रहा हूँ फ़ाइलों को अधिक सार्थक संस्करण नियंत्रण की अनुमति देने के लिए (मुझे पता है - क्यों पहुंच? मैं मौजूदा समाधान का उपयोग क्यों नहीं कर रहा हूं? मान लें कि प्रतिबंध तकनीकी प्रकृति का नहीं हैं)।
मैंने कॉम्प्टीप्स लाइब्रेरी के माध्यम से एडीओ और एडीओएक्स का उपयोग करके डेटाबेस की पूरी सामग्री और संरचना सफलतापूर्वक निर्यात की है, लेकिन मुझे डेटा को दोबारा आयात करने में समस्या आ रही है।
मैं प्रत्येक पंक्ति पर एक सूची के साथ एक पाठ फ़ाइल में प्रत्येक तालिका की सामग्री निर्यात कर रहा हूँ, इसलिए जैसे:
[-9, u'No reply']
[1, u'My home is as clean and comfortable as I want']
[2, u'My home could be more clean or comfortable than it is']
[3, u'My home is not at all clean or comfortable']
और निम्नलिखित समारोह कहा फ़ाइल आयात करने:
import os
import sys
import datetime
import comtypes.client as client
from ADOconsts import *
from access_consts import *
class Db:
def create_table_contents(self, verbosity = 0):
conn = client.CreateObject("ADODB.Connection")
rs = client.CreateObject("ADODB.Recordset")
conn.ConnectionString = self.new_con_string
conn.Open()
for fname in os.listdir(self.file_path):
if fname.startswith("Table_"):
tname = fname[6:-4]
if verbosity > 0:
print "Filling table %s." % tname
conn.Execute("DELETE * FROM [%s];" % tname)
rs.Open("SELECT * FROM [%s];" % tname, conn,
adOpenDynamic, adLockOptimistic)
f = open(self.file_path + os.path.sep + fname, "r")
data = f.readline()
print repr(data)
while data != '':
data = eval(data.strip())
print data[0]
print rs.Fields.Count
rs.AddNew()
for i in range(rs.Fields.Count):
if verbosity > 1:
print "Into field %s (type %s) insert value %s." % (
rs.Fields[i].Name, str(rs.Fields[i].Type),
data[i])
rs.Fields[i].Value = data[i]
data = f.readline()
print repr(data)
rs.Update()
rs.Close()
conn.Close()
सब कुछ ठीक काम करता है सिवाय इसके कि संख्यात्मक मान (डबल और int) शून्य के रूप में डाले जा रहे हैं। इस मुद्दे पर कोई समस्या है कि समस्या मेरे कोड, eval, comtypes, या एडीओ के साथ है या नहीं?
संपादित करें: मैंने संख्याओं को सम्मिलित करने में समस्या को ठीक कर दिया है - उन्हें कास्टिंग के रूप में कास्टिंग (!) दोनों डबल और पूर्णांक फ़ील्ड के लिए समस्या को हल करने लगता है।
हालांकि, अब मेरे पास एक अलग मुद्दा है जिसे पहले उपरोक्त द्वारा अस्पष्ट किया गया था: प्रत्येक पंक्ति में पहला फ़ील्ड डेटा प्रकार के बावजूद 0 पर सेट किया जा रहा है ... कोई विचार?
और समाधान का शेष "rs.Fields [i]। वैल्यू = डेटा [i]" से "rs. फ़ील्ड [i] .Value = str (डेटा [i])" को बदलना था? – BIBD
नहीं, नहीं। स्पष्ट रूप से कहा जाना चाहिए था: गतिशील = सही जोड़ना संख्यात्मक मान दोनों के साथ मूल मुद्दा, और परिवर्तनीय परिणामों के साथ अनुवर्ती समस्या हल। एक बार यह जगह हो जाने के बाद, rs.Fields [i]। वैल्यू = डेटा [i] ठीक काम किया और वास्तव में संख्याओं को कास्टिंग के रूप में स्ट्रिंग्स ने एक प्रकार की मेल नहीं खाई त्रुटि को फेंक दिया। – mavnn
केवल, मैं जवाब पर स्पष्ट नहीं था। इस बिंदु पर मैं स्वीकार करता हूं कि स्वीकृत के रूप में अपना स्वयं का जवाब चिह्नित करें। – BIBD