powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Неправильная работа оператора if
2 сообщений из 2, страница 1 из 1
[Python] Неправильная работа оператора if
    #38030704
vlad52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я написал следующие функции по переносу данных из 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
[Python] Неправильная работа оператора if
    #38031202
Фотография FishHook
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не понял в чем у Вас проблема, но Ваш код выглядит страшновато. Позвольте несколько рекомендаций.
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
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Неправильная работа оператора if
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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