Mysql从脚本导入
Posted
技术标签:
【中文标题】Mysql从脚本导入【英文标题】:Mysql import from script 【发布时间】:2013-07-13 06:10:09 【问题描述】:我正在使用 csv 解析在我的 sql 中导入 csv 文件。我在 mysql 中的表很少。我想在所有表中导入 csv 文件一次。所以我使用了下面的脚本。在那个国家可以进口,但状态表没有显示以下错误
csv_spliter.py:74: Warning: Incorrect integer value: ''country_id'' for column 'id' at row 1
row)
csv_spliter.py:74: Warning: Incorrect integer value: ''0'' for column 'id' at row 1
row)
csv_spliter.py:74: Warning: Incorrect integer value: ''1'' for column 'id' at row 1
row)
csv_spliter.py:74: Warning: Incorrect integer value: ''2'' for column 'id' at row 1
row)
csv_spliter.py:74: Warning: Incorrect integer value: ''3'' for column 'id' at row 1
row)
Done
Traceback (most recent call last):
File "csv_spliter.py", line 89, in <module>
row)
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute
self.errorhandler(self, exc, value)
File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`lcm`.`state`, CONSTRAINT `state_ibfk_1` FOREIGN KEY (`country`) REFERENCES `country` (`id`) ON DELETE CASCADE)')
you@you-desktop:~/Desktop$
<i>
# initialize with empty ints and dicts
name,cities,countries,states=[],[],[],[]
with open('ind.csv','rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',')
reader.next() #skip header
for row in reader:
name.append(row[0])
cities.append(row[2])
states.append(row[3])
countries.append(row[4])
cl = list(set(countries))
sl = list(set(states))
citl = list(set(cities))
inf1 = list(set(name))
with open('countries.csv','w') as cfile:
writer = csv.writer(cfile, delimiter=',')
writer.writerow(['country_id','name'])
for i,x in enumerate(cl):
writer.writerow([i,x])
with open('state.csv','w') as cfile:
writer = csv.writer(cfile, delimiter=',')
writer.writerow(['state_id','country_id','state'])
for i,x in enumerate(sl):
writer.writerow([i,x,cl.index(countries[states.index(x)])])
with open('cities.csv','w') as cfile:
writer = csv.writer(cfile,delimiter=',')
writer.writerow(['city_id','city','st_id','country_id'])
for i,x in enumerate(citl):
writer.writerow([i,x,sl.index(states[cities.index(x)]),
cl.index(countries[cities.index(x)])
])
with open('inf123.csv','w') as cfile:
writer = csv.writer(cfile,delimiter=',')
writer.writerow(['Name_id', 'Name','city_id','st_id','country_id'])
for i,x in enumerate(inf1):
writer.writerow([i,x,
citl.index(cities[name.index(x)]),
sl.index(states[name.index(x)]),
cl.index(countries[name.index(x)])
])
import MySQLdb
import csv
mydb = MySQLdb.connect(host="localhost", # The Host
user="root", # username
passwd="root", # password
db="abcm") # name of the data base
cursor = mydb.cursor()
csv_data = csv.reader(file('countries.csv'))
for row in csv_data:
cursor.execute('INSERT INTO country(id, \
name )' \
'VALUES("%s", "%s")',
row)
#close the connection to the database.
mydb.commit()
cursor.close()
print "Done"
cursor = mydb.cursor()
csv_data = csv.reader(file('state.csv'))
for row in csv_data:
cursor.execute('INSERT INTO state(id, \
country, name )' \
'VALUES("%s", "%s", "%s")',
row)
#close the connection to the database.
mydb.commit()
cursor.close()
print "Done"
</i>
谁能给我一些建议,我该怎么做?
【问题讨论】:
【参考方案1】:您是否在将字符串转储到数据库之前将它们转换为整数?
我认为这就是 Incorrect integer value
错误消息的来源。
【讨论】:
以上是关于Mysql从脚本导入的主要内容,如果未能解决你的问题,请参考以下文章