2012-01-19 135 views
13

我在创建数据库和表时遇到了麻烦。数据库需要在Python脚本中创建。使用Python脚本创建MySQLdb数据库

#connect method has 4 parameters: 
#localhost (where mysql db is located), 
#database user name, 
#account password, 
#database name  
db1 = MS.connect(host="localhost",user="root",passwd="****",db="test") 

回报

_mysql_exceptions.OperationalError: (1049, "Unknown database 'test'") 

所以很明显,在DB1需要先创建的,但如何?我在connect()语句之前尝试了CREATE,但得到错误。

一旦数据库被创建,我该如何创建表? 谢谢, 汤姆

这是语法,这个作品,至少第一次。第二次自然返回的数据库已经存在。现在想出如何正确使用drop命令。

db = MS.connect(host="localhost",user="root",passwd="****") 
    db1 = db.cursor() 
    db1.execute('CREATE DATABASE test1') 

因此,这是第一次通过。第二次通过提供警告“db已经存在”。如何处理这个?以下是我认为它应该如何工作,但不是。或者它应该是一个if语句,查找它是否已经存在,不要填充?

import warnings 
warnings.filterwarnings("ignore", "test1") 
+1

不粗鲁,但你有没有试着用搜索引擎呢?从连接中删除db =“test”并阅读http://dev.mysql.com/doc/refman/5.0/en/sql-syntax.html或http://www.w3schools.com/sql/default .asp –

+0

是的,大量的谷歌搜索(和RTFM不粗鲁,但我不会问是否可以找到它)。当我放弃“测试”时没错。问题是你如何使用python而不是SQL来创建数据库。 – Tom

+0

这是语法,至少在第一次的时候这是有效的。第二次自然返回的数据库已经存在。现在想出如何正确使用drop命令。 db = MS.connect(host =“localhost”,user =“root”,passwd =“****”) db1 = db.cursor() db1.execute('CREATE DATABASE test1') – Tom

回答

12

使用CREATE DATABASE创建数据库:

db1 = MS.connect(host="localhost",user="root",passwd="****") 
cursor = db1.cursor() 
sql = 'CREATE DATABASE mydata' 
cursor.execute(sql) 

使用CREATE TABLE创建表:

sql = '''CREATE TABLE foo (
     bar VARCHAR(50) DEFAULT NULL 
     ) ENGINE=MyISAM DEFAULT CHARSET=latin1 
     ''' 
cursor.execute(sql) 

有创建表时有很多选择。如果你不能确定正确的SQL应该是什么,它可以帮助使用图形化的工具,如phpmyadmin创建一个表,然后用SHOW CREATE TABLE发现需要什么SQL来创建它:

mysql> show create table foo \G 
*************************** 1. row *************************** 
     Table: foo 
Create Table: CREATE TABLE `foo` (
    `bar` varchar(50) DEFAULT NULL 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 
1 row in set (0.00 sec) 

的phpmyadmin可以还会显示用于执行各种操作的SQL。这可以是学习一些基本SQL的一种便捷方式。

一旦你尝试了这一点,那么你可以用Python编写SQL。

+0

我喜欢phpmyadmin以了解正在发生的事情。谢谢! – Tom

7

我认为解决的办法是轻松了很多,用“如果没有”:

sql = "CREATE DATABASE IF NOT EXISTS test1" 
db1.execute(sql) 
6
import MySQLdb 


# Open database connection (If database is not created don't give dbname) 
db = MySQLdb.connect("localhost","yourusername","yourpassword","yourdbname") 

# prepare a cursor object using cursor() method 
cursor = db.cursor() 

# For creating create db 
# Below line is hide your warning 
cursor.execute("SET sql_notes = 0; ") 
# create db here.... 
cursor.execute("create database IF NOT EXISTS yourdbname") 



# create table 
cursor.execute("SET sql_notes = 0; ") 
cursor.execute("create table IF NOT EXISTS test (email varchar(70),pwd varchar(20));") 
cursor.execute("SET sql_notes = 1; ") 

#insert data 
cursor.execute("insert into test (email,pwd) values('[email protected]','test')") 

# Commit your changes in the database 
db.commit() 

# disconnect from server 
db.close() 

#OUTPUT 

mysql> select * from test; 
+-----------------+--------+ 
| email   | pwd | 
+-----------------+--------+ 
| [email protected] | test | 
+-----------------+--------+