0
가능한 중복 :
ProgrammingError: ‘42S02’, '[42S02] [Microsoft]오류 : 알 수없는 표
나는 데이터베이스 Northwind를의 구조를 포함하는 데이터베이스에 대한 설명 (에 프로그램을 작성 -에 Northwind는 Firebird에서 데이터베이스를 작성합니다. 그런 다음 데이터베이스 Northwind (Access)에 연결되어 있으며 생성 된 동일한 Firebird 데이터베이스의 테이블에 데이터베이스 Northwind (Access)의 테이블에 대한 쿼리 SQL 내용을 통해 복사하려고합니다. 디버깅 제가 포함 된 텍스트 SQL 쿼리를 표시하는 경우가있을 때
import pyodbc
#import kinterbasdb
import firebirdsql
import os
import json,sqlite3,sql
con = sqlite3.connect('borey.db')
sampling_tables=con.cursor()
sampling_fields=con.cursor()
sampling_constraints=con.cursor()
sampling_constraints_fields=con.cursor()
sampling_indices=con.cursor()
sampling_indices_fields=con.cursor()
sampling_indices_props=con.cursor()
sampling_fields_from_constraints=con.cursor()
js=[]
sampling_tables.execute(sql.sqltables)
for table in sampling_tables:
tabledict=dict(inform_about_table='?', fields='?', constraints='?', indices='?')
information_about_table_dict=dict(name=table[1], description=table[2], can_add=table[3], can_edit=table[4], can_delete=table[5])
#print(js_information_about_table)
tabledict['inform_about_table']=information_about_table_dict
#print(tabledict)
table_id=table[0]
sampling_fields.execute(sql.sqlfields,(table_id,))
listfields=[]
for field in sampling_fields:
fielddict=dict(position=field[0], name=field[1], description=field[2], datatype=field[3], char_length=field[4], can_input=field[5], can_edit=field[6], show_in_grid=field[7],
is_mean=field[8], autocalculated=field[9], required=field[10])
listfields.append(fielddict)
tabledict['fields']=listfields
#print(tabledict)
sampling_constraints.execute(sql.sqlconstraints,(table_id,))
listconstraints=[]
for constraint in sampling_constraints:
constraintdict=dict(name=constraint[1], constrtype=constraint[2], items='?', reference=constraint[3])
sampling_constraints_fields.execute(sql.sql_constr_det,(constraint[0],table_id))
listitems=[]
for constr_det in sampling_constraints_fields:
listitems.append(constr_det[0])
constraintdict['items']=listitems
listconstraints.append(constraintdict)
tabledict['constraints']=listconstraints
#print(tabledict)
sampling_indices.execute(sql.sqlindices,(table_id,))
listindices=[]
for index in sampling_indices:
indexdict=dict(name=index[1], items='?', position='?', props='?')
index_id=index[0]
sampling_indices_fields.execute(sql.sql_indices_fields,(table_id,index_id))
#sampling_indices_props.execute(sql.sql_indices_descend,(table_id,index_id,))
listfields=[]
listpositions=[]
listprops=[]
for index_det in sampling_indices_fields:
listfields.append(index_det[0])
listpositions.append(index_det[1])
fieldinindex=index_det[0]
sampling_indices_props.execute(sql.sql_indices_descend,(table_id,index_id,fieldinindex))
for index_desc in sampling_indices_props:
listprops.append(index_desc[0])
indexdict['items']=listfields
indexdict['position']=listpositions
indexdict['props']=listprops
listindices.append(indexdict)
tabledict['indices']=listindices
#print(tabledict)
js.append(tabledict)
os.remove('D:/boreas.fdb')
conn=firebirdsql.create_database(host='localhost', database='D:/boreas.fdb', user='sysdba', password='masterkey')
#conn=firebirdsql.connect(host='localhost',database='D:/ThirdTask/test.fdb', user='sysdba', password='masterkey')
cur=conn.cursor()
for nametable in js:
s=''
s+='create table '+nametable['inform_about_table']['name']+'\n'
s+='('+'\n'
countfield=0
for namefield in nametable['fields']:
s+=' '
if namefield['name']=='COUNT':
s+='QUANTITY'
else:
if namefield['name']=='MINIMUM QUANTITY FOR ORDER REPETITION':
s+='MINIMUM_QUANTITY'
else:
if namefield['name']=='PRICE ACCORDING TO THE PRICE-LIST':
s+='LIST_PRICE'
else:
if (namefield['name'].count(' ')!=0) or (namefield['name'].count('-')!=0) or (namefield['name'].count('/')!=0):
s+='"'+namefield['name']+'"'
else:
s+=namefield['name']
if namefield['datatype']=='FMTBCD':
s+=' '+' INTEGER NOT NULL'
else:
if namefield['datatype']=='STRING':
s+=' '+'VARCHAR'
else:
if namefield['datatype']=='MEMO':
s+=' '+'BLOB SUB_TYPE 1'
else:
if namefield['datatype']=='LARGEINT':
s+=' '+'INTEGER'
else:
if namefield['datatype']=='SMALLINT':
s+=' '+'INTEGER'
else:
if namefield['datatype']=='CURRENCY':
s+=' '+'NUMERIC(18,2)'
else:
if namefield['datatype']=='BOOLEAN':
s+=' '+'INTEGER'
else:
s+=' '+namefield['datatype']
if namefield['datatype']=='STRING':
s+='('+str(namefield['char_length'])+')'
countfield+=1
#if countfield!=len(nametable['fields']):
s+=','+'\n'
#else:
#s+='\n'
#s+='\n'
for nameconstraint in nametable['constraints']:
if nameconstraint['constrtype']=='PRIMARY':
s+=' CONSTRAINT '+nameconstraint['name']+ ' PRIMARY KEY('
countfieldinconstr=0
for namefield in nameconstraint['items']:
countfieldinconstr+=1
if countfieldinconstr!=len(nameconstraint['items']):
if (namefield.count(' ')!=0) or (namefield.count('-')!=0) or (namefield.count('/')!=0):
s+='"'+namefield+'"'+','
else:
if namefield=='COUNT':
s+='QUANTITY'+','
else:
s+=namefield+','
else:
if (namefield.count(' ')!=0) or (namefield.count('-')!=0) or (namefield.count('/')!=0):
s+='"'+namefield+'"'+')'+'\n'
else:
if namefield=='COUNT':
s+='QUANTITY'+')'+'\n'
else:
s+=namefield+')'+'\n'
s+=');'+'\n'
print s
cur.execute(s)
#conn.commit()
#conn.begin()
for nameindex in nametable['indices']:
#print 'nameidex[props] ', nameindex['props']
s=''
for prop in nameindex['props']:
if prop==0:
if (nameindex['name'].count(' ')!=0) or (nameindex['name'].count('-')!=0) or (nameindex['name'].count('/')!=0):
s+='create ascending index "'+nameindex['name'] + '" on '+nametable['inform_about_table']['name']+' ('
else:
if nameindex['name']=='IDX_INFORMATION_ABOUT_ORDER_INVENTORY_ID':
s+='create ascending index ' + 'IDX_INVENTORY_ID' + ' on '+nametable['inform_about_table']['name']+' ('
else:
if nameindex['name']=='IDX_INFORMATION_ABOUT_ORDER_ORDERDETAILS':
s+='create ascending index ' + 'IDX_ORDERDETAILS' + ' on '+nametable['inform_about_table']['name']+' ('
else:
if nameindex['name'].count('INFORMATION_ABOUT_ORDER_')!=0:
s+='create ascending index ' + nameindex['name'][1:4]+nameindex['name'][-len(nameindex['name'])+28:] + ' on '+nametable['inform_about_table']['name']+' ('
else:
s+='create ascending index '+nameindex['name'] + ' on '+nametable['inform_about_table']['name']+' ('
countitem=0
for nameitem in nameindex['items']:
if countitem!=len(nameindex['items'])-1:
if (nameitem.count(' ')!=0) or (nameitem.count('-')!=0) or (nameitem.count('/')!=0):
s+='"'+nameitem+'"'+', '
else:
if nameitem=='COUNT':
s+='QUANTITY'+', '
else:
s+=nameitem+', '
else:
if (nameitem.count(' ')!=0) or (nameitem.count('-')!=0) or (nameitem.count('/')!=0):
s+='"'+nameitem+'"'+');'+'\n'
else:
if nameitem=='COUNT':
s+='QUANTITY'+');'+'\n'
else:
s+=nameitem+');'+'\n'
countitem+=1
print s
cur.execute(s)
#conn.commit()
for nametable in js:
for nameconstraint in nametable['constraints']:
if nameconstraint['constrtype']=='FOREIGN':
s=''
s+='ALTER TABLE '+nametable['inform_about_table']['name']+'\n'
s+=' '+'ADD CONSTRAINT '+nameconstraint['name']+' FOREIGN KEY ('
for namefield in nameconstraint['items']:
if (namefield.count(' ')!=0) or (namefield.count('-')!=0) or (namefield.count('/')!=0):
s+='"'+namefield+'")'+'\n'
else:
s+=namefield+')'+'\n'
s+=' '+'REFERENCES '+nameconstraint['reference']
sampling_fields_from_constraints.execute(sql.sql_fields, (nameconstraint['reference'],))
for fields in sampling_fields_from_constraints:
field=fields[0]
if (field.count(' ')!=0) or (field.count('-')!=0) or (field.count('/')!=0):
s+=' ("'+field+'");'+'\n'
else:
s+=' ('+field+');'+'\n'
print s
cur.execute(s)
#conn.commit()
#conn.commit()
s="""
create table CLIENTS
(
ID INTEGER NOT NULL,
COMPANY VARCHAR(50),
"LAST NAME" VARCHAR(50),
"FIRST NAME" VARCHAR(50),
"E-MAIL ADDRESS" VARCHAR(50),
"JOB TITLE" VARCHAR(50),
"BUSINESS PHONE" VARCHAR(25),
"HOME PHONE" VARCHAR(25),
"MOBILE PHONE" VARCHAR(25),
"FAX NUMBER" VARCHAR(25),
ADDRESS BLOB SUB_TYPE 1,
CITY VARCHAR(50),
"STATE/PROVINCE" VARCHAR(50),
"ZIP/POSTAL CODE" VARCHAR(15),
"COUNTRY/REGION" VARCHAR(50),
"WEB-SITE" VARCHAR(25),
NOTES BLOB SUB_TYPE 1,
INCLUDING BLOB
);
"""
s1='create ascending index IDX_CLIENTS_CITY on CLIENTS (CITY);'
"""db = 'D:/ThirdTask/Northwind.accdb'
connaccess = win32com.client.Dispatch(r'ADODB.Connection')
DSN = ('PROVIDER = Microsoft.Jet.OLEDB.4.0;DATA SOURCE = ' + db + ';')
connaccess.Open(DSN)
rs = win32com.client.Dispatch(r'ADODB.Recordset')
strsql = "select * from deer"
rs.Open(strsql, conn, 1, 3)
t = rs.GetRows()
connaccess.Close()
"""
conAcc = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\ThirdTask\Northwind.accdb')
SqlAccess=conAcc.cursor();
SqlAccess.execute(sql.sql_count_records_clients);
CountOfRecords=SqlAccess.fetchone()[0];
print CountOfRecords
id=0
while id<CountOfRecords:
id+=1
SqlAccess.execute(sql.sql_allfields_clients, (id,))
clientdict=dict(ident=id, organization=SqlAccess.fetchone()[1]);
print clientdict
s='INSERT INTO CLIENTS (ID, COMPANY) VALUES'
s+='('+str(clientdict['ident'])+', ' +'\''+clientdict['organization']+'\''+')';
print s
cur.execute(s)
conn.commit()
#print s
#cur.execute(s)
#conn.commit()
#cur.execute(s1)
#conn.commit()
#cur=con.cursor()
con.close()
conn.close()
conAcc.close();
#print "Connect succesfully"
create table CLIENTS
(
ID INTEGER NOT NULL,
COMPANY VARCHAR(50),
"LAST NAME" VARCHAR(50),
"FIRST NAME" VARCHAR(50),
"E-MAIL ADDRESS" VARCHAR(50),
"JOB TITLE" VARCHAR(50),
"BUSINESS PHONE" VARCHAR(25),
"HOME PHONE" VARCHAR(25),
"MOBILE PHONE" VARCHAR(25),
"FAX NUMBER" VARCHAR(25),
ADDRESS BLOB SUB_TYPE 1,
CITY VARCHAR(50),
"STATE/PROVINCE" VARCHAR(50),
"ZIP/POSTAL CODE" VARCHAR(15),
"COUNTRY/REGION" VARCHAR(50),
"WEB-SITE" VARCHAR(25),
NOTES BLOB SUB_TYPE 1,
INCLUDING BLOB,
CONSTRAINT PK_CLIENTS_ID PRIMARY KEY(ID)
);
create ascending index IDX_CLIENTS_CITY on CLIENTS (CITY);
create ascending index IDX_CLIENTS_COMPANY on CLIENTS (COMPANY);
create ascending index IDX_CLIENTS_FIRST_NAME on CLIENTS ("FIRST NAME");
create ascending index IDX_CLIENTS_LAST_NAME on CLIENTS ("LAST NAME");
create ascending index IDX_CLIENTS_POSTAL_CODE on CLIENTS ("ZIP/POSTAL CODE");
create ascending index IDX_CLIENTS_PRIMARYKEY on CLIENTS (ID);
create ascending index "IDX_CLIENTS_STATE/PROVINCE" on CLIENTS ("STATE/PROVINCE");
29
{'organization': u'\u041e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0410', 'ident': 1}
INSERT INTO CLIENTS (ID, COMPANY) VALUES(1, 'Организация А')
Traceback (most recent call last):
File "D:\ThirdTask\connect.py", line 263, in <module>
cur.execute(s)
File "C:\Python27\lib\site-packages\firebirdsql\fbcore.py", line 495, in execute
stmt_type, stmt_handle = self._execute(query, params)
File "C:\Python27\lib\site-packages\firebirdsql\fbcore.py", line 457, in _execute
(h, oid, buf) = self.transaction.connection._op_response()
File "C:\Python27\lib\site-packages\firebirdsql\wireprotocol.py", line 764, in _op_response
return self._parse_op_response()
File "C:\Python27\lib\site-packages\firebirdsql\wireprotocol.py", line 308, in _parse_op_response
raise OperationalError(message, gds_codes, sql_code)
OperationalError: Dynamic SQL Error
SQL error code = -204
Table unknown
CLIENTS
At line 1, column 13
구체적으로 형성되는 인쇄 페이스트 요청
INSERT INTO CLIENTS (ID, COMPANY) VALUES(1, 'Организация А')
가져온 (모든 출력 인용되지 않음) 오류가 발생했습니다 (위 참조). 어떻게 고치는 지?
커밋을 실행하는 방법을 알면 도움이 될 것입니다. –
나는 그것을 풋혼에서하는 법을 모르지만, 파이어 버드의 모든 명령은 트랜잭션 내부에 있어야합니다. 테이블을 작성할 때 테이블에 레코드를 삽입하기 전에 트랜잭션 커밋이 있어야합니다. 코드를 보면 con.commit을 실행하고 있다고 생각합니다. –