2015-01-03 3 views
0

나는 데이터베이스에있는 행 수를 알아 내기 위해 값을 계산할 변수를 만들고 싶습니다. 파이썬 스크립트에서 작업하고 있습니다. 하나의 값을 만들어야하는 값의 수를 알아 내기 위해 값을 계산합니다.데이터베이스의 행 수를 계산하는 방법

예를 들면 다음과 같습니다. 데이터베이스에 연결하여 채널을 선택하면 1으로 시작하는 행 값을 얻은 다음 69를 추가하여 70이됩니다. 다른 69을 추가하여 139을 만들고 69을 추가하여 208 등으로 만들면 데이터베이스에서 마지막 69 개의 ​​행을 얻을 때까지 각 시간에 계속 추가하고 싶습니다. 그렇다면 하나의 값을 얻기 위해 내가 가진 값의 수를 각 값에 의거하고 싶습니다.

예 : 그 값 1, 70,이 믿고있어

>> 1 
>> 70 
>> 139 
>> 208 
>> 277 
>> 346 
>> 415 
>> 484 
>> 553 
>> 622 

208, 277, 346, 415, 484, 553622139 총 10 개를 만들기 위해. 그게 내가 가지고있는 값인 1을 가지고 있기 때문입니다. 값이 70인데, 그 값은 두 가지입니다. 여기

코드입니다 :

나는 내가 데이터베이스에 저장된 각 데이터의 69 개 행을 가지고 있기 때문에, 값을 만들기 위해 69 개 행을 계산 할
#get the programs list 
cur = con.cursor() 
cur.execute('SELECT channel FROM programs') 
programs = cur.fetchall() 
start_pos = 375 # indent for first program 
channels_index = 69 + 1 # count how many rows I have got in a database 

. 여기

내 데이터베이스 모습의 예입니다 같은 :

ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
ABC FAMILY 
...etc until 69 
CBS 
CBS 
CBS 
CBS 
CBS 
CBS 
CBS 
CBS 
CBS 
CBS 
...etc until 69 

편집 : 여기

18:29:44 T:5836 NOTICE: [(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), (u'101 ABC FAMILY ',), 
(u'101 ABC FAMILY ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), (u'102 CBS ',), 
(u'102 CBS ')] 

결과 :

다음은 데이터베이스에서 채널 목록입니다
<<<<<<<< the value `1` is missing 
19:43:08 T:6208 NOTICE: 70 
19:43:08 T:6208 NOTICE: 139 
19:43:08 T:6208 NOTICE: 208 
19:43:08 T:6208 NOTICE: 277 
19:43:08 T:6208 NOTICE: 346 
19:43:08 T:6208 NOTICE: 415 
19:43:08 T:6208 NOTICE: 484 
19:43:08 T:6208 NOTICE: 553 
19:43:08 T:6208 NOTICE: 622 
19:43:08 T:6208 NOTICE: 691 
19:43:08 T:6208 NOTICE: 760 
19:43:08 T:6208 NOTICE: 829 
19:43:08 T:6208 NOTICE: 898 
19:43:08 T:6208 NOTICE: 967 
19:43:08 T:6208 NOTICE: 1036 
19:43:08 T:6208 NOTICE: 1105 <<<<<<<< not needed 

당신이 내게 어떻게 도움을 줄 수 있습니까? 행 1로 시작하는 데이터베이스의 행은 데이터베이스에서 마지막 69 행을 가져올 때까지 매번 69 개까지 추가 한 다음 단일 값을 만드는 데 필요한 값의 수를 계산합니다.

+0

어렸을 적에 테이블과 열이있는 데이터베이스를 정의했습니다. 표는 무엇이고, 기둥은 무엇이며, 모든 가치와 관련이 있습니까? –

+0

@SergeBallesta 테이블 이름을 프로그램이라고하고 열을 채널이라고합니다.데이터베이스에 1104 개의 행이 있지만 데이터베이스에 저장하는 행 수에 따라 랜덤하게됩니다. – Rob

+0

@SergeBallesta 알고 계십니까? – Rob

답변

1

절대 fetchall을 테이블에서 제외하고 피할 수 있으면 Python으로 반복합니다. SQL 집계를 사용하십시오. 이 훨씬 더 일 것입니다. 예를 들어

: 물론

#Initialize a running total. For some reason you asked to initialize it to one, but note that that will give you a final total that is 1 greater than the number of 
running_total = 1 
#Query will select the sum of 
query = "SELECT Channel, COUNT(*) AS number_of_programs FROM Programs GROUP BY Channel" 
cursor = con.cursor() 
cursor.execute(query) 
for result in cursor.fetchall(): 
    print running_total 
    #Add the number of programs for the channel to your running total. You access it as the second element of the returned record, because we selected number_of_programs second in our query. 
    print 'Channel {0} has {1} programs. Current program count is {2}'.format(result[0],result[1],running_total) 
    running_total += result[1] 

, 당신은 실제로 모든 단일 채널이 정확히 69 프로그램이 있는지 알고 있다면, 당신은 쓸 수 있습니다.

query = "SELECT COUNT(*) FROM programs" 
cursor.execute(query) 
x = cursor.fetchone()[0] 
running_total = 1 #Again, you want to start counting at 1 for some reason 
while running_total < x: 
    running_total += 69 
    print running_total 

그러나 나는 그것이 당신이 원하는 것이라고 생각하지 않습니다.

+0

거의 틀림없이이 점에 대해 대단히 감사합니다. 그러나 잘못된 점이 몇 가지 있습니다. 이 코드에서는 하나의 출력 값이 '1'이고 출력 값이 '1105'가 아니기 때문에 결과가 나옵니다. 왜냐하면 이것이 데이터베이스 끝에있는 마지막 행이기 때문입니다. 나는 '1'로 시작하는 값을 얻고 싶을 때마다 데이터베이스의 마지막 값인 '1036'에 도달 할 때까지 매번 69를 더하고 싶습니다. 내 업데이트 된 질문에서 출력 결과에 누락 된 값과 필요하지 않은 마지막 출력 값을 넣었는지 확인하십시오. – Rob

+0

답변을 기다리고 있습니다. – Rob

+1

왜이 결과를 정확히 얻고 싶습니까? 이 정보로 무엇을하고 싶은지 조금만 이해하면 질문에 쉽게 답할 수 있습니다. 숙제가 있습니까? –

관련 문제