rpy2
3.0.0 пытается упростить свою систему преобразования, и с этим сделать свои недостатки легче как предвидеть, так и смягчать.
Здесь, когда активен слой преобразования в numpy, происходит следующее:
Эта симметрия не является обязательным требованием, а является способом, которым по умолчанию является уровень преобразования numpy. Можно настроить слой асимметричного преобразования, который будет здесь преобразовывать числовые массивы в R-массивы, но оставляя R-массивы как таковые при возвращении из R, относительно быстро и легко.
import numpy
from rpy2.rinterface_lib import sexp
from rpy2 import robjects
from rpy2.robjects import conversion
from rpy2.robjects import numpy2ri
# We are going to build our custom converter by subtraction, that is
# starting from the numpy converter and only revert the part converting R
# objects into numpy arrays to the default conversion. We could have also
# build it by addition.
myconverter = conversion.Converter('assym. numpy',
template=numpy2ri.converter)
myconverter.rpy2py.register(sexp.Sexp,
robjects.default_converter.rpy2py)
Это пользовательское преобразование может быть использовано тогда, когда оно нам нужно:
with conversion.localconverter(myconverter):
res = stats.quantile(numpy.array([1, 2, 3, 4]))
Результат:
>>> print(res.names)
[1] "0%" "25%" "50%" "75%" "100%"
Если это выглядит как слишком много усилий, вы можете также полностью пропустите конвертер numpy, используйте только конвертер по умолчанию и вручную приведите ваши numpy массивы к подходящим R массивам, когда вы сочтете это необходимым:
>>> stats.quantile(robjects.vectors.IntVector(numpy.array([1, 2, 3, 4]))).names
R object with classes: ('character',) mapped to:
['0%', '25%', '50%', '75%', '100%']
The easiest way is to use mysql_result
.
I copied some of the code below from other answers to save time.
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);
$num_rows = mysql_num_rows($result);
// i is the row number and will be 0 through $num_rows-1
for ($i = 0; $i < $num_rows; $i++) {
$value = mysql_result($result, i, 'id');
echo 'Row ', i, ': ', $value, "\n";
}
Мне очень нравится философия библиотеки баз данных ezSQL , которая объединяет нативные методы SQL в более простой для понимания используйте интерфейс.
Извлечение одного значения из базы данных тривиально:
$id = $db->get_var("SELECT id FROM games WHERE ...");
Это также облегчает выборку одной строки, столбца,
Внимание! Ваш SQL не является хорошей идеей, потому что он выберет все строки (никакое предложение WHERE не предполагает «WHERE 1»!) И засорит ваше приложение, если у вас есть большое количество строк. (Какой смысл выбирать 1000 строк, когда будет делать 1?) Так что вместо этого, при выборе только одной строки, убедитесь, что вы указали предложение LIMIT:
$sql = "SELECT id FROM games LIMIT 1"; // Select ONLY one, instead of all
$result = $db->query($sql);
$row = $result->fetch_assoc();
echo 'Game ID: '.$row['id'];
Для этого различия требуется, чтобы MySQL выбрал только при первом совпадении запись, поэтому упорядочение таблицы важно, или вы должны использовать предложение WHERE. Однако найти эту запись намного меньше памяти и времени, чем получить каждую запись и вывести строку номер один.
Сначала вы подключаетесь к своей базе данных. Затем вы строите строку запроса. Затем вы запускаете запрос и сохраняете результат, и, наконец, извлекаете нужные строки из результата, используя один из методов выборки.
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database',$link);
$sql = 'SELECT id FROM games'
$result = mysql_query($sql,$link);
$singleRow = mysql_fetch_array($result)
echo $singleRow;
Редактировать: Извините, забыл соединение с базой данных. Добавил его сейчас
'Best way' Помимо некоторых обычных способов извлечения отдельной записи из базы данных с помощью PHP, выполните следующие действия:
$sql = "SELECT id, name, producer FROM games WHERE user_id = 1";
$result = $db->query($sql);
$row = $result->fetch_row();
// Внутри класса таблицы
$select = $this->select()->where('user_id = ?', 1);
$row = $this->fetchRow($select);
Используя PDO , вы можете сделать что-то вроде этого:
$db = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');
$stmt = $db->query('select id from games where ...');
$id = $stmt->fetchColumn(0);
if ($id !== false) {
echo $id;
}
Вы также должны проверить, выполняет ли PDO :: query ()
запрос OK (либо проверяя результат, либо сообщая PDO, что вместо этого выбрасывает исключения)
$link = mysql_connect('localhost','root','yourPassword')
mysql_select_db('database_name', $link);
$sql = 'SELECT id FROM games LIMIT 1';
$result = mysql_query($sql, $link) or die(mysql_error());
$row = mysql_fetch_assoc($result);
print_r($row);
В ответе ChrisAD не хватало нескольких вещей. После подключения к mysql крайне важно выбрать базу данных, а также оператор die ()
позволяет вам видеть ошибки, если они возникают.
Будьте осторожны, это работает, только если у вас есть 1 запись в базе данных, потому что в противном случае вы нужно добавить WHERE id = xx
или что-то подобное, чтобы получить только одну строку и не более. Также вы можете получить доступ к своему идентификатору, например $ row ['id']