Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Неправильная работа оператора if / 2 сообщений из 2, страница 1 из 1
08.11.2012, 17:13:12
    #38030704
vlad52
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Python] Неправильная работа оператора if
Я написал следующие функции по переносу данных из Access в Firebird


Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
	def getFirebirdFieldNames(firebird_cursor, tablename):
		firebird_cursor.execute('select rdb$field_name from rdb$relation_fields where rdb$relation_name=\'%s\' order by rdb$field_position' % (tablename,))
		field_names = list()
		for c in firebird_cursor.fetchall():
			field_names.append(c[0])
		return field_names

	def FirebirdDatetime(dt):
		return '\'%s.%s.%s\'' % (str(dt.day).rjust(2,'0'),
									   str(dt.month).rjust(2,'0'),
									   str(dt.year).rjust(4,'0'))

	def SelectFromAccessTable(tablename):
		return 'select * from [' + tablename+']'

	def InsertToFirebirdTable(tablename, row):
		values=''
		#values=values.encode('cp1251', 'replace')
	#   copyrow=[]
	#   print type(values)
		for i in range(len(row)):
			#print row[i]
			#print type(row[i])
			#temp=''
			if (i<len(row)-1):
					if type(row[i]) == int:
						temp = str(row[i])
					else:
						if type(row[i]) == str:
							temp = '\'%s\'' % (row[i],)
						else:
							if type(row[i]) == datetime.datetime:
								temp =FirebirdDatetime(row[i])
							else:
								if type(row[i]) == decimal.Decimal:
									temp = str(row[i])
								else:
									if row[i]==None:
										temp='null'
					values+=temp+', '                 
			else:
					if type(row[i]) == int:
						temp = str(row[i])
					else:
						if type(row[i]) == str:
							temp = '\'%s\'' % (row[i],)
						else:
							if type(row[i]) == datetime.datetime:
								temp =FirebirdDatetime(row[i])
							else:
								if type(row[i]) == decimal.Decimal:
									temp = str(row[i])
								else:
									if row[i]==None:
										temp='null'
					values+=temp
			print temp
		return 'insert into '+tablename+' values ('+values+')'

	def AccessToFirebird(accesstablename, firebirdtablename, accesscursor, firebirdcursor):
		SelectSql=SelectFromAccessTable(accesstablename)
		for row in accesscursor.execute(SelectSql):
			InsertSql=InsertToFirebirdTable(firebirdtablename, row)
			InsertSql=InsertSql
			print InsertSql
			firebirdcursor.execute(InsertSql)



При вызове функции
Код: python
1.
AccessToFirebird

в основном модуле вызывается функция
Код: python
1.
InsertToFirebirdTable

, в которой происходит вывод на экран формируемых insert запросов. Как видно из нижеприведенного вывода
Код: python
1.
temp

присваивается
Код: python
1.
row[0]

и в дальнейшем не изменяется, что противоречит логике программы (в цикле происходит обход всего
Код: python
1.
row

и в результате должен получиться запрос вставки со всеми передаваемыми значениями). Почему так происходит и как сделать, чтобы результат соответствовал цели? Привожу вывод формируемых запросов (база данных Борей в Access)

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
238.
239.
240.
241.
242.
243.
244.
245.
246.
247.
248.
249.
250.
251.
252.
253.
254.
255.
256.
257.
258.
259.
260.
261.
262.
263.
264.
265.
266.
267.
268.
269.
270.
271.
272.
273.
274.
275.
276.
277.
278.
279.
280.
281.
282.
283.
284.
285.
286.
287.
288.
289.
290.
291.
292.
293.
294.
295.
296.
297.
298.
299.
300.
301.
302.
303.
304.
305.
306.
307.
308.
309.
310.
311.
312.
313.
314.
315.
316.
317.
318.
319.
320.
321.
322.
323.
324.
325.
326.
327.
328.
329.
330.
331.
332.
333.
334.
335.
336.
337.
338.
339.
340.
341.
342.
343.
344.
345.
346.
347.
348.
349.
350.
351.
352.
353.
354.
355.
356.
357.
358.
359.
360.
361.
362.
363.
364.
365.
366.
367.
368.
369.
370.
371.
372.
373.
374.
375.
376.
377.
378.
379.
380.
381.
382.
383.
384.
385.
386.
387.
388.
389.
390.
391.
392.
393.
394.
395.
396.
397.
398.
399.
400.
401.
402.
403.
404.
405.
406.
407.
408.
409.
410.
411.
412.
413.
414.
415.
416.
417.
418.
419.
420.
421.
422.
423.
424.
425.
426.
427.
428.
429.
430.
431.
432.
433.
434.
435.
436.
437.
438.
439.
440.
441.
442.
443.
444.
445.
446.
447.
448.
449.
450.
451.
452.
453.
454.
455.
456.
457.
458.
459.
460.
461.
462.
463.
464.
465.
466.
467.
468.
469.
470.
471.
472.
473.
474.
475.
476.
477.
478.
479.
480.
481.
482.
483.
484.
485.
486.
487.
488.
489.
490.
491.
492.
493.
494.
495.
496.
497.
498.
499.
500.
501.
502.
503.
504.
505.
506.
507.
508.
509.
510.
511.
512.
513.
514.
515.
516.
517.
518.
519.
520.
521.
522.
523.
524.
525.
526.
527.
528.
529.
530.
531.
532.
533.
534.
535.
536.
537.
538.
539.
540.
541.
542.
543.
544.
545.
546.
547.
548.
549.
550.
551.
552.
553.
554.
555.
556.
557.
558.
559.
560.
561.
562.
563.
564.
565.
566.
567.
568.
569.
570.
571.
572.
573.
574.
575.
576.
577.
578.
579.
580.
581.
582.
583.
584.
585.
586.
587.
588.
589.
590.
591.
592.
593.
594.
595.
596.
597.
598.
599.
600.
601.
602.
603.
604.
605.
606.
607.
608.
609.
610.
611.
612.
613.
614.
615.
616.
617.
618.
619.
620.
621.
622.
623.
624.
625.
626.
627.
628.
629.
630.
631.
632.
633.
634.
635.
636.
637.
638.
639.
640.
641.
642.
643.
644.
645.
646.
647.
648.
649.
650.
651.
652.
653.
654.
655.
656.
657.
658.
659.
660.
661.
662.
663.
664.
665.
666.
667.
668.
669.
670.
671.
672.
673.
674.
675.
676.
677.
678.
679.
680.
681.
682.
683.
684.
685.
686.
687.
688.
689.
690.
691.
692.
693.
694.
695.
696.
697.
698.
699.
700.
701.
702.
703.
704.
705.
706.
707.
708.
709.
710.
711.
712.
713.
714.
715.
716.
717.
718.
719.
720.
721.
722.
723.
724.
725.
726.
727.
728.
729.
730.
731.
732.
733.
734.
735.
736.
737.
738.
739.
740.
741.
742.
743.
744.
745.
746.
747.
748.
749.
750.
751.
752.
753.
754.
755.
756.
757.
758.
759.
760.
761.
762.
763.
764.
765.
766.
767.
768.
769.
770.
771.
772.
773.
774.
775.
776.
777.
778.
779.
780.
781.
782.
783.
784.
785.
	1
	1
	1
	1
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (1, 1, 1, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	2
	2
	2
	2
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (2, 2, 2, 2, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	3
	3
	3
	3
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (3, 3, 3, 3, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	4
	4
	4
	4
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (4, 4, 4, 4, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	5
	5
	5
	5
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (5, 5, 5, 5, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	6
	6
	6
	6
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (6, 6, 6, 6, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	7
	7
	7
	7
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (7, 7, 7, 7, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	8
	8
	8
	8
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (8, 8, 8, 8, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	9
	9
	9
	9
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (9, 9, 9, 9, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	10
	10
	10
	10
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (10, 10, 10, 10, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	11
	11
	11
	11
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (11, 11, 11, 11, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	12
	12
	12
	12
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (12, 12, 12, 12, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	13
	13
	13
	13
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (13, 13, 13, 13, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	14
	14
	14
	14
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (14, 14, 14, 14, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	15
	15
	15
	15
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (15, 15, 15, 15, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	16
	16
	16
	16
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (16, 16, 16, 16, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	17
	17
	17
	17
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (17, 17, 17, 17, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	18
	18
	18
	18
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (18, 18, 18, 18, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	19
	19
	19
	19
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (19, 19, 19, 19, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	20
	20
	20
	20
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (20, 20, 20, 20, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	21
	21
	21
	21
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (21, 21, 21, 21, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	22
	22
	22
	22
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (22, 22, 22, 22, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	23
	23
	23
	23
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (23, 23, 23, 23, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	24
	24
	24
	24
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (24, 24, 24, 24, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	25
	25
	25
	25
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (25, 25, 25, 25, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	26
	26
	26
	26
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (26, 26, 26, 26, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	27
	27
	27
	27
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (27, 27, 27, 27, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	28
	28
	28
	28
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (28, 28, 28, 28, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	29
	29
	29
	29
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into CLIENTS values (29, 29, 29, 29, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	1
	1
	1
	1
	1
	1
	1
	1
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (1, 1, 1, 1, 1, 1, 1, 1, null, null, null, null, null, null, null, null, null, null)
	2
	2
	2
	2
	2
	2
	2
	2
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (2, 2, 2, 2, 2, 2, 2, 2, null, null, null, null, null, null, null, null, null, null)
	3
	3
	3
	3
	3
	3
	3
	3
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (3, 3, 3, 3, 3, 3, 3, 3, null, null, null, null, null, null, null, null, null, null)
	4
	4
	4
	4
	4
	4
	4
	4
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (4, 4, 4, 4, 4, 4, 4, 4, null, null, null, null, null, null, null, null, null, null)
	5
	5
	5
	5
	5
	5
	5
	5
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (5, 5, 5, 5, 5, 5, 5, 5, null, null, null, null, null, null, null, null, null, null)
	6
	6
	6
	6
	6
	6
	6
	6
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (6, 6, 6, 6, 6, 6, 6, 6, null, null, null, null, null, null, null, null, null, null)
	7
	7
	7
	7
	7
	7
	7
	7
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (7, 7, 7, 7, 7, 7, 7, 7, null, null, null, null, null, null, null, null, null, null)
	8
	8
	8
	8
	8
	8
	8
	8
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (8, 8, 8, 8, 8, 8, 8, 8, null, null, null, null, null, null, null, null, null, null)
	9
	9
	9
	9
	9
	9
	9
	9
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into EMPLOYEES values (9, 9, 9, 9, 9, 9, 9, 9, null, null, null, null, null, null, null, null, null, null)
	2
	2
	insert into ROLES values (2, 2)
	2
	2
	insert into EMPLOYEES_ROLES values (2, 2)
	1
	1
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into DELIVERY values (1, 1, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	2
	2
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into DELIVERY values (2, 2, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)
	3
	3
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	null
	insert into DELIVERY values (3, 3, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null)


...
Рейтинг: 0 / 0
09.11.2012, 09:12:52
    #38031202
FishHook
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[Python] Неправильная работа оператора if
Я не понял в чем у Вас проблема, но Ваш код выглядит страшновато. Позвольте несколько рекомендаций.
1. Чтобы не писать такую лесенку
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
if type(row[i]) == int:
						temp = str(row[i])
					else:
						if type(row[i]) == str:
							temp = '\'%s\'' % (row[i],)
						else:
							if type(row[i]) == datetime.datetime:
								temp =FirebirdDatetime(row[i])
							else:
								if type(row[i]) == decimal.Decimal:
									temp = str(row[i])
								else:
									if row[i]==None:
										temp='null'


лучше юзать elif, вот так будет гораздо лучше

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
if type(row[i]) == int:
    temp = str(row[i])
elif type(row[i]) == str:
    temp = '\'%s\'' % (row[i],)
elif type(row[i]) == datetime.datetime:
    temp =FirebirdDatetime(row[i])
elif type(row[i]) == decimal.Decimal:
    temp = str(row[i])
else:
    temp='null'


2. Для проверки типов используйте isinstance
3.
Код: python
1.
2.
3.
for i in range(len(row)):
.......
............(row[i])


Зачем? Это же вам не Си, делайте иттерацию в стиле foreach
Код: python
1.
2.
3.
for i row:
.......
............i


4.
Код: python
1.
2.
3.
field_names = list()
		for c in firebird_cursor.fetchall():
			field_names.append(c[0])


Списковые выражения помогут избежать лишнего кода
Код: python
1.
field_names =[c[0] for c in firebird_cursor.fetchall()]


5.
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
types={
    int:lambda x:str(x),
    str:lambda x: " '%s' " % x,
    datetime.date:FirebirdDatetime,
    .........
    .........
}
tmp=types[type(s)](s)
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Неправильная работа оператора if / 2 сообщений из 2, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]